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()方法来分别获取该键值对对象的键和值。内层也是同样的原理。
      遍历嵌套双列集合时,一定要把握好每一步操作的对象,不要弄混淆,保持清楚的思路很重要,这样即使有多层嵌套也没有问题。

  • 相关阅读:
    赫尔维茨公式
    从解析几何的角度分析二次型
    Struts 1 Struts 2
    记一次服务器被入侵的调查取证
    契约式设计 契约式编程 Design by contract
    lsblk df
    Linux Find Out Last System Reboot Time and Date Command 登录安全 开关机 记录 帐号审计 历史记录命令条数
    Infrastructure for container projects.
    更新文档 版本控制 多版本并发控制
    Building Microservices: Using an API Gateway
  • 原文地址:https://www.cnblogs.com/magics/p/3637000.html
Copyright © 2011-2022 走看看