1. 程式人生 > >老紫竹JAVA提高教程 14 認識Map之LinkedHashMap

老紫竹JAVA提高教程 14 認識Map之LinkedHashMap

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               
Map 介面的雜湊表和連結列表實現,具有可預知的迭代順序。此實現與 HashMap的不同之處在於,後者維護著一個運行於所有條目的雙重連結列表。此連結列表定義了迭代順序,該迭代順序通常就是將鍵插入到對映中的順序(插入順序)。注意,如果在對映中重新插入 鍵,則插入順序不受影響。(如果在呼叫 m.put(k, v) 前 m.containsKey(k) 返回了true,則呼叫時會將鍵 k 重新插入到對映 m 中。)

此實現可以讓客戶避免未指定的、由 HashMap(及 Hashtable)所提供的通常為雜亂無章的排序工作,同時無需增加與 TreeMap 相關的成本。使用它可以生成一個與原來順序相同的對映副本,而與原對映的實現無關:

  1. package
     collection;

  2. import java.util.HashMap;
  3. import java.util.Iterator;
  4. import java.util.LinkedHashMap;
  5. import java.util.Map;

  6. /**
  7.  * 老紫竹JAVA提高教程(14)-認識Map之LinkedHashMap。<br>
  8.  * <br>
  9.  * 這個類繼承自HashMap,擁有其全部特性.<br>
  10.  * 同時內部維護著一個所有條目的雙重連結,具有可預知的迭代順序。<br>
  11.  * 預設按照插入的順序進行顯示.<br>
  12.  * 重複插入一個Key的資料,不會影響到使用的先後順序。<br>
  13.  * 此類避免了HashMap的雜亂無章的使用順序,同時又避免了TreeMap的額外成本.<br>
  14.  * 
  15.  * @author 老紫竹 JAVA世紀網(java2000.net)
  16.  * 
  17.  */
  18. public class Lession14LinkedHashMap {
  19.   public static void main(String[] args) {
  20.     // 分別使用2個類,進行相同的資料測試
  21.     // 可以看到,HashMap的順序是不可預測的
  22.     // 而LinkedHashMap的順序嚴格按照插入順序

  23.     // 102=>102; 100=>100; 101=>101; 98=>98; 99=>99;
  24.     testMap(new HashMap());
  25.     // 98=>98; 99=>99; 100=>100; 101=>101; 102=>102;
  26.     testMap(new LinkedHashMap());
  27.     
  28.     // 刪除資料後,LinkedHashMap會將資料放到末尾最後的位置
  29.     // 而HashMap可能會使用前一個空缺的位置
  30.   }

  31.   public static void testMap(Map map) {
  32.     for (int i = 98; i <= 102; i++) {
  33.       map.put(i, i);
  34.     }
  35.     showMap(map);
  36.     // 嘗試重複插入資料
  37.     map.put(100100);
  38.     showMap(map);

  39.     // 刪除資料,並再次插入
  40.     map.remove(100);
  41.     map.put(100100);
  42.     showMap(map);
  43.   }

  44.   public static void showMap(Map map) {
  45.     // 迭代Key的操作
  46.     Iterator it = map.keySet().iterator();
  47.     Object key;
  48.     while (it.hasNext()) {
  49.       key = it.next();
  50.       System.out.print(key + "=>" + map.get(key) + "; ");
  51.     }
  52.     System.out.println();
  53.   }
  54. }

執行效果:
102=>102; 100=>100; 101=>101; 98=>98; 99=>99;
102=>102; 100=>100; 101=>101; 98=>98; 99=>99;
102=>102; 100=>100; 101=>101; 98=>98; 99=>99;
98=>98; 99=>99; 100=>100; 101=>101; 102=>102;
98=>98; 99=>99; 100=>100; 101=>101; 102=>102;
98=>98; 99=>99; 101=>101; 102=>102; 100=>100;           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述