双列集合Map的嵌套使用,例如HashMap中还有一个HashMap,这样的集合遍历起来稍微有点儿复杂。例如一个集合:HashMap<Integer,HashMap<String,Integer>> hm = new HashMap<>(),能够先把内层的HashMap当作一个总体,作完外层遍历以后再对内层遍历。
仍是结合一个例子来讲明Map集合的嵌套使用到底是什么样子。例如一个年级有两个班,一个文科班和一个理科班,编号分别为A班和B班,两个班中又分别有学生,用HashMap来存储学生的姓名和年龄。能够先把两个班级的编号和对应信息存储在一个HashMap中,再用另外一个HashMap来存储对应班级中的学生信息。
如:HashMap<Character,HashMap<String,Integer>>,接下来看看代码的实现。java
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("\t" + 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("\t" + key.getKey() + ":" + key.getValue()); } } } }
经过上面的例子能够看出:集合Map的嵌套无论用哪一种方式遍历,思想是一致的,都是先从外层依次向内层遍历,可是两者也有不一样的地方。
方式一是先获取外层集合的键的集合,经过遍历键时再获取该键对应的值,而内层也是同样,一样先获取内层集合键的集合,再依次取出键所对应的值达到遍历的目的。
方式二是把键和值看做一个总体,先取到整个键值对对象的集合,再经过该键值对对象的getKey()和getValue()方法来分别获取该键值对对象的键和值。内层也是一样的原理。
遍历嵌套双列集合时,必定要把握好每一步操做的对象,不要弄混淆,保持清楚的思路很重要,这样即便有多层嵌套也没有问题。数组