雙列集合Map的嵌套遍歷


  雙列集合Map的嵌套使用,例如HashMap中還有一個HashMap,這樣的集合遍歷起來稍微有點兒復雜。例如一個集合:HashMap<Integer,HashMap<String,Integer>> hm = new HashMap<>(),可以先把內層的HashMap看成一個整體,做完外層遍歷之后再對內層遍歷。
  還是結合一個例子來說明Map集合的嵌套使用究竟是什么樣子。例如一個年級有兩個班,一個文科班和一個理科班,編號分別為A班和B班,兩個班中又分別有學生,用HashMap來存儲學生的姓名和年齡。可以先把兩個班級的編號和對應信息存儲在一個HashMap中,再用另一個HashMap來存儲對應班級中的學生信息。
  如:HashMap<Character,HashMap<String,Integer>>,接下來看看代碼的實現。

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class HashMapDemo {
    public static void main(String[] args) {
        // 創建外層HashMap來存儲班級信息和學生,理科班用A作為鍵,文科班用B作為鍵,類型用Character。
        HashMap<Character, HashMap<String, Integer>> outHashMap = new HashMap<>();
        // 創建兩個班級的學生信息,姓名用String,年齡用Integer類型存儲。
        // 注意:集合中不能存儲基本數據類型,這是集合區別於數組的特點之一。
        HashMap<String, Integer> inHashMap1 = new HashMap<>();
        HashMap<String, Integer> inHashMap2 = new HashMap<>();
        inHashMap1.put("趙飛燕", 17);
        inHashMap1.put("錢多多", 20);
        inHashMap1.put("孫小可", 19);
        inHashMap2.put("張可辛", 21);
        inHashMap2.put("胡一刀", 21);
        inHashMap2.put("王八蛋", 18);
        // 把學生信息加到外層集合中。
        outHashMap.put('A', inHashMap1);
        outHashMap.put('B', inHashMap2);
        // 開始遍歷,先完成外層遍歷。
        //方式一
        // 獲取外層集合鍵集合set1。
        Set<Character> set1 = outHashMap.keySet();
        for (Character ch : set1) {
            System.out.println(ch + "班");
            // 通過多層集合的鍵獲取內層存儲學生信息的集合對象。
            HashMap<String, Integer> inHashMap = outHashMap.get(ch);
            // 獲取內層存儲學生信息集合的鍵的集合
            Set<String> set2 = inHashMap.keySet();
            for (String key : set2) {
                System.out.println("\t" + key + ":" + inHashMap.get(key));
            }
        }
        //方式二
        //獲取外層鍵值對對象的集合
        Set<Map.Entry<Character, HashMap<String, Integer>>> outSet = outHashMap.entrySet();
        for (Map.Entry<Character, HashMap<String, Integer>> keyEntry : outSet) {
            System.out.println(keyEntry.getKey() + "班");
            //獲取內層鍵值對對象的集合
            Set<Map.Entry<String, Integer>> inSet = keyEntry.getValue().entrySet();
            for (Map.Entry<String, Integer> key : inSet) {
                System.out.println("\t" + key.getKey() + ":" + key.getValue());
            }
        }
    }
}

  通過上面的例子可以看出:集合Map的嵌套不管用哪種方式遍歷,思想是一致的,都是先從外層依次向內層遍歷,但是二者也有不同的地方。
  方式一是先獲取外層集合的鍵的集合,通過遍歷鍵時再獲取該鍵對應的值,而內層也是一樣,同樣先獲取內層集合鍵的集合,再依次取出鍵所對應的值達到遍歷的目的。
  方式二是把鍵和值看作一個整體,先取到整個鍵值對對象的集合,再通過該鍵值對對象的getKey()和getValue()方法來分別獲取該鍵值對對象的鍵和值。內層也是同樣的原理。
  遍歷嵌套雙列集合時,一定要把握好每一步操作的對象,不要弄混淆,保持清楚的思路很重要,這樣即使有多層嵌套也沒有問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM