Set-Map以及异常处理

Set-Map

HashSet类和LinkedList类以及TreeSet类都是属于Set集合里面的
Set集合都是无序的(存储数据和取出数据不同,相同只是偶然),元素是唯一的,不能重复

实现类

HashSet
HashSet和TreeSet差不多,而且list里面的方法在Set里面都可以使用,可以参考上一篇,这里就不重复了,例如这里都可add,也可使用lambda表达式

HashSet<String>names =new HashSet<>();
        names.add("jack");
        names.add("merry");
        names.add("abc");
        names.removeIf(ele->{
            return ele.compareTo("c")>0;
        });

TreeSet
它是可以排序的集合
例如我们要有一个人的集合,对年龄排序,就可以用到TreeSet,但是会用到comepareTo的方法,注意
使用的对象必须实现Comparable接口的compareTo方法
在compareTo里面实现具体如何比较
具体代码实现

 class Person implements Comparable {
        String name;
        int age;

        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }


        @Override
        public int compareTo(Object o) {
            if (o instanceof Person) {
                Person o1 = (Person) o;
                //自己规定比较的策略
                if (this.age != o1.age) {
                    return this.age - o1.age;
                } else {
                    //年龄相同的情况下 再比姓名的字母
                    return this.name.compareTo(o1.name);
                }

            } else {
                return -1;


            }

        }
    }

下面的就是在main函数里面实现

 TreeSet<Person>score =new TreeSet<>(new Comparator<Person>() {
            @Override
            public int compare(Person person, Person t1) {
                return person.compareTo(t1);
            }
        });
         Person p1=new Person("jack",20);
         Person p2=new Person("jack",30);
         Person p3=new Person("rose",20);
        score.add(p1);
        score.add(p2);
        score.add(p3);
        System.out.println(score);

HashSet里面还有一个HashMap
HashMap里面就是一个集合,不过是通过键key-值value存储数据
下面的代码中我标注了如何使用

HashMap<String, Integer> score = new HashMap<>();
        //添加对象
        score.put("Chinese", 89);
        score.put("Math", 94);
        score.put("English", 92);
        score.size();
        //或取所有的key
        System.out.println(score.keySet());
        //获取所有的value
        System.out.println(score.values());
        //获取Entry:key-value
        System.out.println(score.entrySet());
        //获取一个键key对应的值
        System.out.println(score.get("English"));

键值对的遍历
1.通过遍历key来得到每一个key对应的值

for (String key : score.keySet()) {
            //通过key得到值
            int s = score.get(key);
            System.out.println("key" + key + "value:" + s);
        }
  1. 通过EntrySet 得到Entry对象的集合 一个Entry管理一个键值对 getkey getvalue
Set<Map.Entry<String, Integer>> entrys = score.entrySet();
        for (Map.Entry entry : entrys) {
            //得到Entry对应的key
            String key = (String) entry.getKey();

            //获取Entry对应的值
            Integer value = (Integer) entry.getValue();

            System.out.println("key:" + key + " value:" + value);


        }

异常处理

异常处理 处理运行过程中出现的不可控的错误 使程序更健壮
Exception
try{
执行的代码
可能出现异常

  • 一旦出现异常 系统自动为我们创建一个异常对象 并抛出
    }catch(NullPointerException e){
    如果需要自己处理异常就catch
    }catch(IOEException e){
    如果有多个异常 可以使用多个catch来捕获
    如果有多个异常 catch的顺序是从小到大
    }finally{
    不管有没有异常Finally都会被执行
    处理资源回收 网络连接 数据库连接 I/O流
    }
public class Exception1 {
    public static void main(String[] args) {
        FileReader fr = null;
        int a = 0;
        int b = 0;
        try {
            int c = b / a;
            fr = new FileReader("");

        } catch (ArithmeticException e) {
            System.out.println(e.getMessage());
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } finally {
            try {
                fr.close();
            } catch (IOException i) {
            }


        }

如果异常出现 后面的代码将不会执行

  • try代码块 不要抓太多代码
  • 使用throws抛出异常 经外部处理
  • 当特殊情况出现了 自己可以选择抛出异常
  • throw
  • throw new IllegalAccessException()
    *当然也可以自定义异常类
class TException{
    public static void test() throws FileNotFoundException,NullPointerException{
        FileReader fr=new FileReader("");
    }
    public static void test2() throws IllegalAccessException{
        //......
        if (2 > 1){
            throw new IllegalAccessException();
        }
    }

    public static void test3() throws hmlException{
        throw new hmlException("无所作为");
    }
}
class hmlException extends Exception{
    //1.提供一个无参构造方法
    public hmlException(){

    }
    //2.提供一个有参构造方法 参数是一个字符串
    public hmlException(String desc){

    }
}

代码还是要经常看看前面的,才能融会贯通。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,634评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,951评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,427评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,770评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,835评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,799评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,768评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,544评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,979评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,271评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,427评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,121评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,756评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,375评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,579评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,410评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,315评论 2 352

推荐阅读更多精彩内容