zoukankan      html  css  js  c++  java
  • 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     }
  • 相关阅读:
    结对-四则运算-最终程序
    结对- 四则运算器-结对项目总结
    课后作业-阅读任务-阅读提问-3
    课后作业-现代软件工程-阅读笔记
    软件工程课程总结
    团队-学生成绩管理一阶段互评
    结对-英文词频检测程序-测试过程
    团队-学生成绩管理-项目进度
    团队-学生成绩管理-模块开发过程
    eclipse下的文件路径问题
  • 原文地址:https://www.cnblogs.com/yanghaoyu0624/p/11604982.html
Copyright © 2011-2022 走看看