1 public static void main(String[] args) {
2
3 HashMap<String, HashMap<Person, String>> map = new HashMap<String, HashMap<Person, String>>();
4
5 HashMap<Person, String> mapin1 = new HashMap<Person, String>();
6 mapin1.put(new Person("小绿1", 20), "Java0723(1)");
7 mapin1.put(new Person("小白1", 21), "Java0723(1)");
8
9 HashMap<Person, String> mapin2 = new HashMap<Person, String>();
10 mapin2.put(new Person("小绿2", 20), "Java0723(2)");
11 mapin2.put(new Person("小白2", 21), "Java0723(2)");
12
13 HashMap<Person, String> mapin3 = new HashMap<Person, String>();
14 mapin3.put(new Person("小绿3", 20), "Java0723(3)");
15 mapin3.put(new Person("小白3", 21), "Java0723(3)");
16
17 map.put("1", mapin1);
18 map.put("2", mapin2);
19 map.put("3", mapin3);
20
21 // System.out.println(map);
22
23 // 方法一
24 // foreachHashMap1(map);
25 // 方法二
26 // foreachHashMap2(map);
27 // 方法三
28 // foreachHashMap3(map);
29 // 方法四
30 foreachHashMap4(map);
31 }
32
33 // 方法一 增强for 加通过 key 找 value
34 public static void foreachHashMap1(HashMap<String, HashMap<Person, String>> map) {
35 // 获取第一层的key 的 Set 集合
36 Set<String> set = map.keySet();
37 for (String str : set) {
38 // str :第一层的key
39 // 通过key获取第一层的值
40 HashMap<Person, String> value = map.get(str);// 第一层的value
41 // 遍历第一层的值
42
43 // 获取第二层的key 的 Set 集合
44 Set<Person> setin = value.keySet();
45 for (Person p : setin) {
46 // p:第二层的 key
47
48 String valuein = value.get(p); // 第二次的值
49 System.out.println("外键:" + str + ",外值:" + value + ",内键:" + p + ",内值:" + valuein);
50 }
51 }
52 }
53
54 // 方法二 Iterator 迭代器
55 public static void foreachHashMap2(HashMap<String, HashMap<Person, String>> map) {
56 // 获取第一层的key 的 Set 集合
57 Set<String> set = map.keySet();
58 // 把该集合转成 Iterator 集合 用于迭代
59 Iterator<String> it = set.iterator();
60 while (it.hasNext()) {
61 // 获取第一层的 key 并存储
62 String key = it.next();
63 // 通过第一层的 key 获取 第一层的 value
64 HashMap<Person, String> value = map.get(key);
65
66 // 遍历第二层value
67
68 // 获取第二层 key 的 Set 集合
69 Set<Person> setin = value.keySet();
70 // 把该集合转成 Iterator 集合 用于迭代
71 Iterator<Person> itin = setin.iterator();
72
73 while (itin.hasNext()) {
74 // 获取第二层的 key 并存储
75 Person keyin = itin.next();
76 // 通过该 key 获取第二层的 value
77 String valuein = value.get(keyin);
78 System.out.println("外键:" + key + ",外值:" + value + ",内键:" + keyin + ",内值:" + valuein);
79 }
80 }
81 }
82
83 // 方法三 Map.Entry<k,v> 加 增强 for
84 public static void foreachHashMap3(HashMap<String, HashMap<Person, String>> map) {
85
86 Set<Map.Entry<String, HashMap<Person, String>>> set = map.entrySet();
87 for (Map.Entry<String, HashMap<Person, String>> mapEntry : set) {
88 String key = mapEntry.getKey();// 第一层的 key
89 HashMap<Person, String> value = mapEntry.getValue();// 第一层的 value
90
91 Set<Map.Entry<Person, String>> setin = value.entrySet();
92 for (Map.Entry<Person, String> mapEntryin : setin) {
93 Person keyin = mapEntryin.getKey(); // 第二层的 key
94 String valuein = mapEntryin.getValue();// 第二层的 value
95 System.out.println("外键:" + key + ",外值:" + value + ",内键:" + keyin + ",内值:" + valuein);
96 }
97 }
98 }
99
100 // 方法四 Map.Entry<k,v> 加 增强 Iterator
101 public static void foreachHashMap4(HashMap<String, HashMap<Person, String>> map) {
102 Set<Map.Entry<String, HashMap<Person, String>>> set = map.entrySet();
103 // 将 此 set 集合转成 Iterator 迭代集合
104 Iterator<Map.Entry<String, HashMap<Person, String>>> it = set.iterator();
105 while (it.hasNext()) {
106 // 获取第一层 的 对象
107 Map.Entry<String, HashMap<Person, String>> Entry = it.next();
108 String key = Entry.getKey();//第一层的 key
109 HashMap<Person, String> value = Entry.getValue();//第一层的 value
110
111 Set<Map.Entry<Person, String>> setin = value.entrySet();
112 Iterator<Map.Entry<Person, String>> itin = setin.iterator();
113 while(itin.hasNext()){
114 Map.Entry<Person, String> Entryin = itin.next();
115 Person keyin = Entryin.getKey();//第二层的key
116 String valuein = Entryin.getValue();//第二层的value
117 System.out.println("外键:" + key + ",外值:" + value + ",内键:" + keyin + ",内值:" + valuein);
118 }
119
120 }
121 }