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集合嵌套 的遍历四种方式的主要内容,如果未能解决你的问题,请参考以下文章