1 public class Person {
2 private String name;
3 private Integer age;
4 public String getName() {
5 return name;
6 }
7 public void setName(String name) {
8 this.name = name;
9 }
10 public Integer getAge() {
11 return age;
12 }
13 public void setAge(Integer age) {
14 this.age = age;
15 }
16 public Person(String name, Integer age) {
17 super();
18 this.name = name;
19 this.age = age;
20 }
21 public Person() {
22 super();
23 }
24
25
26 @Override
27 public String toString() {
28 return "Person [name=" + name + ", age=" + age + "]";
29 }
30 @Override
31 public int hashCode() {
32 final int prime = 31;
33 int result = 1;
34 result = prime * result + ((age == null) ? 0 : age.hashCode());
35 result = prime * result + ((name == null) ? 0 : name.hashCode());
36 return result;
37 }
38 @Override
39 public boolean equals(Object obj) {
40 if (this == obj)
41 return true;
42 if (obj == null)
43 return false;
44 if (getClass() != obj.getClass())
45 return false;
46 Person other = (Person) obj;
47 if (age == null) {
48 if (other.age != null)
49 return false;
50 } else if (!age.equals(other.age))
51 return false;
52 if (name == null) {
53 if (other.name != null)
54 return false;
55 } else if (!name.equals(other.name))
56 return false;
57 return true;
58 }
59 }
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 }