一、俗稱集合嵌套就是集合套集合
二、分析 Map集合的嵌套
自定義一個類:
public class Person { private String name; private int age; public Person() { //有參和無參構造 super(); } public Person(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public int hashCode() { //這個地方寫hashcode是為了不讓重復元素存入 final int prime = 31; int result = 1; result = prime * result + age; result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Person other = (Person) obj; if (age != other.age) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + "]"; } }
//注意事項:①導包時注意
②正確使用 entryset和keyset關鍵字
③使用迭代器遍歷時 注意先創建集合,增強for正常遍歷即可(因map無下標 不可以使用普通for進行遍歷)
package com.oracle.demo01; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import java.util.Set; public class Demo7 { public static void main(String[] args) { // 大map HashMap<String, HashMap<Person, String>> oracle = new HashMap<String, HashMap<Person, String>>(); // 小map HashMap<Person, String> java1018 = new HashMap<Person, String>(); HashMap<Person, String> java1227 = new HashMap<Person, String>(); // 封裝集合 //給小map賦值 用put關鍵字 java1018.put(new Person("C羅", 34), "踢足球"); java1018.put(new Person("詹姆斯", 35), "打籃球"); java1227.put(new Person("張繼科", 28), "打乒乓球"); java1227.put(new Person("朱婷", 22), "打排球"); oracle.put("java1018", java1018); //給大map賦值 同樣用put關鍵字 oracle.put("java1227", java1227); // entryset +iterator遍歷 // 1.獲取大的Map的大結婚豬呢個對象Set集合 Set<Map.Entry<String, HashMap<Person, String>>> bigentrys = oracle.entrySet();//上面大map里面寫的泛型是什么這里就寫什么 Iterator<Map.Entry<String, HashMap<Person, String>>> it = bigentrys.iterator(); while (it.hasNext()) { Map.Entry<String, HashMap<Person, String>> bigentry = it.next(); String bigkey = bigentry.getKey(); //獲取大對象key值 HashMap<Person, String> smallMap = bigentry.getValue(); //獲取大對象value值 Set<Entry<Person, String>> entrySet = smallMap.entrySet(); //創建小對象集合 Iterator<Entry<Person, String>> sit = entrySet.iterator(); while (sit.hasNext()) { Entry<Person, String> e = sit.next(); System.out.println(bigkey + "..." + e.getKey() + "..." + e.getValue()); } } System.out.println("========================="); // 2. entryset 增強for遍歷 Set<Entry<String, HashMap<Person, String>>> entrySet = oracle.entrySet(); for (Entry<String, HashMap<Person, String>> e : entrySet) { String bigKey = e.getKey(); HashMap<Person, String> hashMap = e.getValue(); Set<Entry<Person, String>> entrySet2 = hashMap.entrySet(); for (Entry<Person, String> e5 : entrySet2) { System.out.println(bigKey + "..." + e5.getKey() + "..." + e5.getValue()); } } System.out.println("3.增強for========================="); // 3.增強for+keyset方法 Set<String> keySet = oracle.keySet(); for (String s : keySet) { HashMap<Person, String> h = oracle.get(s); Set<Person> h2 = h.keySet(); for (Person p : h2) { System.out.println(s + "..." + p + "..." + h.get(p)); } } System.out.println("4.迭代器=========================");
//4. 迭代器+keyset方法 Set<String> keySet2 = oracle.keySet(); Iterator<String> ite = keySet2.iterator(); while (ite.hasNext()) { String s = ite.next(); HashMap<Person, String> hashMap = oracle.get(s); Set<Person> keySet3 = hashMap.keySet(); Iterator<Person> it8 = keySet3.iterator(); while (it8.hasNext()) { Person p1 = it8.next(); System.out.println(s + "..." + p1 + "..." + hashMap.get(p1)); } } } }
歡迎各位大神指點和評論;