Java集合---map集合的遍历

  • 学到map最让不理解的就是map的遍历了,普通的单键,单值还好,一碰到要嵌套的,就让人晕,这里就把一些我所了解遍历map的几种方式写一下

  • 遍历map一般分为两大派,分别是用keySet()方法,和entrySet()方法,这里就用hashMap来演示了

keySet()

  • 调用keySet(),返回一个由hashMap的键组成的一个set集合,遍历set集合在调用hashMap的get()方法,就能获取到值

HashMap<String,String> hashMap = new HashMap<>();
        hashMap.put("aaa", "111");
        hashMap.put("bbb", "222");
        hashMap.put("ccc", "333");
        hashMap.put("ddd", "444");
        Set<String> keySet = hashMap.keySet();
        for (String s : keySet) {
            System.out.println(s + "---" + hashMap.get(s));
        }

map嵌套map使用情况是在有自定义对象时

        HashMap<Person, String> hashMap1 = new HashMap<>();
        hashMap1 .put(new Person("老王", 55), "北京");
        hashMap1 .put(new Person("老李", 65), "上海");
        hashMap1 .put(new Person("老赵", 50), "广州");
        hashMap1 .put(new Person("老张", 60), "深圳");
        //上面定义了第一个map集合

        HashMap<Person, String> hashMap2= new HashMap<>();
        hashMap2.put(new Person("小王", 25), "北京");
        hashMap2.put(new Person("小李",35), "上海");
        hashMap2.put(new Person("小赵",20), "广州");
        hashMap2.put(new Person("小张",30), "深圳");
        //上面定义里第二个map集合

        HashMap<HashMap<Person, String>, String> hm = new HashMap<>();
        hm.put(hashMap1, "老前辈");
        hm.put(hashMap2, "小崽子");
        //将两个map集合存放进一个大的map集合中

        for(HashMap<Person, String> ks : hm.keySet()) {
            String value = hm.get(ks);

            //首先拿到大的map集合键的set集合,在对set集合遍历获取到大的map集合的值,也就是"老前辈"和"小崽子"
            for(Person key : ks.keySet()) {     
            //因为大的map集合的键也是一个map集合,继续用ks来调用keySet()方法得到了小集合中的值 
                String value2 = hm.get(key);

                System.out.println(key + "=" + value2 + "=" + value);
            }
        }

entrySet()

  • entrySet()方法获取map集合的键和值的映射,这里就需要用到Map.Entry这个接口里的两个方法了getKey()和getValue()
HashMap<String,String> hashMap = new HashMap<>();
        hashMap.put("aaa", "111");
        hashMap.put("bbb", "222");
        hashMap.put("ccc", "333");
        hashMap.put("ddd", "444");
        Set<Entry<String, String>> entrySet = hashMap.entrySet();
        for (Entry<String, String> entry : entrySet) {
            System.out.println(entry.getKey() + "---" + entry.getValue());
        }

这也没什么好说的,主要还是嵌套,来看一下,还是上面的代码,我就直接写遍历这里了

Set<Entry<HashMap<Person, String>, String>> entrySet = hm.entrySet();
        for (Entry<HashMap<Person, String>, String> entry : entrySet) {
            //也是通过entrySet()对大的集合遍历,getValue()获取到值
            String value = entry.getValue();
            //getKey()获取到大map的键,也是一个集合,所以要再次调用entrySet()
            HashMap<Person, String> key = entry.getKey();
            for (Entry<Person, String> entry2 : key.entrySet()) {
                //获取到,map的键和值后就可以输出了
                Person key2 = entry2.getKey();
                String value2 = entry2.getValue();
                System.out.println(key2 + "---" + value2 + "---" + value);
            }
        }

要注意用什么去调用entrySet(),要遍历哪个集合,就用哪个调用

  • 其实用那种方式调用还得看实际情况,有的时候用keySet()会发生值为null,这时候就需要用entrySet()了

你可能感兴趣的:(java,HashMap,遍历)