zoukankan      html  css  js  c++  java
  • 双列集合Map的嵌套遍历

      双列集合Map的嵌套使用,例如HashMap中还有一个HashMap,这样的集合遍历起来稍微有点儿复杂。例如一个集合:HashMap<Integer,HashMap<String,Integer>> hm = new HashMap<>(),可以先把内层的HashMap看成一个整体,做完外层遍历之后再对内层遍历。
      还是结合一个例子来说明Map集合的嵌套使用究竟是什么样子。例如一个年级有两个班,一个文科班和一个理科班,编号分别为A班和B班,两个班中又分别有学生,用HashMap来存储学生的姓名和年龄。可以先把两个班级的编号和对应信息存储在一个HashMap中,再用另一个HashMap来存储对应班级中的学生信息。
      如:HashMap<Character,HashMap<String,Integer>>,接下来看看代码的实现。

    import java.util.HashMap;
    import java.util.Map;
    import java.util.Set;
    
    public class HashMapDemo {
        public static void main(String[] args) {
            // 创建外层HashMap来存储班级信息和学生,理科班用A作为键,文科班用B作为键,类型用Character。
            HashMap<Character, HashMap<String, Integer>> outHashMap = new HashMap<>();
            // 创建两个班级的学生信息,姓名用String,年龄用Integer类型存储。
            // 注意:集合中不能存储基本数据类型,这是集合区别于数组的特点之一。
            HashMap<String, Integer> inHashMap1 = new HashMap<>();
            HashMap<String, Integer> inHashMap2 = new HashMap<>();
            inHashMap1.put("赵飞燕", 17);
            inHashMap1.put("钱多多", 20);
            inHashMap1.put("孙小可", 19);
            inHashMap2.put("张可辛", 21);
            inHashMap2.put("胡一刀", 21);
            inHashMap2.put("王八蛋", 18);
            // 把学生信息加到外层集合中。
            outHashMap.put('A', inHashMap1);
            outHashMap.put('B', inHashMap2);
            // 开始遍历,先完成外层遍历。
            //方式一
            // 获取外层集合键集合set1。
            Set<Character> set1 = outHashMap.keySet();
            for (Character ch : set1) {
                System.out.println(ch + "班");
                // 通过多层集合的键获取内层存储学生信息的集合对象。
                HashMap<String, Integer> inHashMap = outHashMap.get(ch);
                // 获取内层存储学生信息集合的键的集合
                Set<String> set2 = inHashMap.keySet();
                for (String key : set2) {
                    System.out.println("	" + key + ":" + inHashMap.get(key));
                }
            }
            //方式二
            //获取外层键值对对象的集合
            Set<Map.Entry<Character, HashMap<String, Integer>>> outSet = outHashMap.entrySet();
            for (Map.Entry<Character, HashMap<String, Integer>> keyEntry : outSet) {
                System.out.println(keyEntry.getKey() + "班");
                //获取内层键值对对象的集合
                Set<Map.Entry<String, Integer>> inSet = keyEntry.getValue().entrySet();
                for (Map.Entry<String, Integer> key : inSet) {
                    System.out.println("	" + key.getKey() + ":" + key.getValue());
                }
            }
        }
    }

      通过上面的例子可以看出:集合Map的嵌套不管用哪种方式遍历,思想是一致的,都是先从外层依次向内层遍历,但是二者也有不同的地方。
      方式一是先获取外层集合的键的集合,通过遍历键时再获取该键对应的值,而内层也是一样,同样先获取内层集合键的集合,再依次取出键所对应的值达到遍历的目的。
      方式二是把键和值看作一个整体,先取到整个键值对对象的集合,再通过该键值对对象的getKey()和getValue()方法来分别获取该键值对对象的键和值。内层也是同样的原理。
      遍历嵌套双列集合时,一定要把握好每一步操作的对象,不要弄混淆,保持清楚的思路很重要,这样即使有多层嵌套也没有问题。

  • 相关阅读:
    ArrayList源码 (基于1.7)
    java.lang.Class类中的某些方法
    jdk1.8新特性 : 接口中可以有普通方法(非静态方法)和静态方法 , 颠覆了之前我的理解 : 接口中只能有共有常量和抽象方法的概念,后面必须要加一句jdk1.7和1..7之前
    Cesium中级教程10
    Cesium中级教程9
    Cesium中级教程8
    Cesium中级教程7
    Cesium中级教程6
    Cesium中级教程5
    Cesium中级教程4
  • 原文地址:https://www.cnblogs.com/magics/p/3637000.html
Copyright © 2011-2022 走看看