Java 集合-Map集合嵌套 的遍历四种方式

Posted 杨淏宇

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 集合-Map集合嵌套 的遍历四种方式相关的知识,希望对你有一定的参考价值。

  

 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     }

 

以上是关于Java 集合-Map集合嵌套 的遍历四种方式的主要内容,如果未能解决你的问题,请参考以下文章

Map集合的四种常用遍历方式整理

Map集合的四种遍历方式

Map集合遍历的四种方式

Map集合遍历的四种方式

Map集合遍历的四种方式

Map集合的四种遍历方式