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     }

原文地址:https://www.cnblogs.com/yanghaoyu0624/p/11604982.html

时间: 2024-08-03 17:22:39

Java 集合-Map集合嵌套 的遍历四种方式的相关文章

Java Array数组 遍历 四种方式(包含 Lambda 表达式遍历)

package com.hello; import java.util.Arrays; /** * @Author Miracle Luna * @Date 2019/6/9 23:33 * @Version 1.0 */public class ArrayLambda { public static void main(String[] args) { Integer[] items = { 1, 2, 3 }; // 普通for循环遍历 System.out.println("第一种方式:普

(转)java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明)

java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明);部分资料参考网络资源 1. java向MySQL插入当前时间的四种方式 第一种:将java.util.Date类型的时间转成mysql数据库识别的java.sql.Date类型时间 注:java.util.Date是java.sql.Date的父类 Date time= new java.sql.Date(newjava.util.Date().getTime()); 第二种: java用PreparedS

java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明)

java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明);部分资料参考网络资源 1. java向MySQL插入当前时间的四种方式 第一种:将java.util.Date类型的时间转成mysql数据库识别的java.sql.Date类型时间 注:java.util.Date是java.sql.Date的父类 Date time= new java.sql.Date(newjava.util.Date().getTime()); 第二种: java用PreparedS

List集合 遍历 四种方式(包含 Lambda 表达式遍历)

示例代码如下: package com.miracle.luna.lambda; import java.util.ArrayList; import java.util.List; /** * @Author Miracle Luna * @Date 2019/6/9 23:36 * @Version 1.0 */ public class ListLambda { public static void main(String[] args) { List<String> items = n

Java报表工具FineReport导出EXCEL的四种方式

在实际的应用中会经常需要将数据导出成excel,导出的方式除原样导出还有分页导出.分页分sheet导出和大数据量导出.对于excel2003版,限制了每个sheet的最大行数和列数,大数据量导出时会默认时分多个sheet,而excel2007不会出现这样的问题.这些导出方式在JAVA程序中分别有不同的接口来实现: 1.  原样导出 原样导出就是不预览直接导出excel 其程序接口代码如下: outputStream = new FileOutputStream(new File("E:\\Exc

Java Enum枚举 遍历判断 四种方式(包括 Lambda 表达式过滤)

package com.miracle.luna.lambda; import java.util.Arrays; /** * @Author Miracle Luna * @Date 2019/6/9 23:40 * @Version 1.0 */ public enum AlarmGrade { ATTENTION("attention", "提示"), WARNING("warning","警告"), SERIOUS(&

java创建对象的四种方式

java程序中对象的创建有四种方式: ● 调用new语句创建对象,最常见的一种 ● 运用反射手段创建对象,调用java.lang.Class 或者 java.lang.reflect.Constructor 类的newInstance()实例方法 ● 调用对象的clone()方法 ● 运用序列化手段,调用java.io.ObjectInputStream 对象的 readObject()方法. 下面分别实例讲述 一.new语句创建 ?// 使用java语言的关键字 new 创建对象,初始化对象数

java线程实现的四种方式

java多线程的实现可以通过以下四种方式 1.继承Thread类,重写run方法 2.实现Runnable接口,重写run方法 3.通过Callable和FutureTask创建线程 4.通过线程池创建线程 方式1,2不再赘述. 方式3,通过Callable和FutureTask创建线程实现多线程 @Test public void MyCallableTest() throws Exception { //创建线程执行对象 MyCallable myCallable = new MyCalla

Java遍历Map对象的四种方式

关于java中遍历map具体哪四种方式,请看下文详解吧. 方式一 这是最常见的并且在大多数情况下也是最可取的遍历方式.在键值都需要时使用. 1 Map<Integer, Integer> map = new HashMap<Integer, Integer>(); 2 for (Map.Entry<Integer, Integer> entry : map.entrySet()) { 3 System.out.println("Key = " + e