老紫竹JAVA提高教程 14 認識Map之LinkedHashMap
阿新 • • 發佈:2018-11-07
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
Map 介面的雜湊表和連結列表實現,具有可預知的迭代順序。此實現與 HashMap的不同之處在於,後者維護著一個運行於所有條目的雙重連結列表。此連結列表定義了迭代順序,該迭代順序通常就是將鍵插入到對映中的順序(插入順序)。注意,如果在對映中重新插入 鍵,則插入順序不受影響。(如果在呼叫 m.put(k, v) 前 m.containsKey(k) 返回了true,則呼叫時會將鍵 k 重新插入到對映 m 中。)
此實現可以讓客戶避免未指定的、由 HashMap(及 Hashtable)所提供的通常為雜亂無章的排序工作,同時無需增加與 TreeMap 相關的成本。使用它可以生成一個與原來順序相同的對映副本,而與原對映的實現無關:
- package
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.LinkedHashMap;
- import java.util.Map;
- /**
- * 老紫竹JAVA提高教程(14)-認識Map之LinkedHashMap。<br>
- * <br>
- * 這個類繼承自HashMap,擁有其全部特性.<br>
- * 同時內部維護著一個所有條目的雙重連結,具有可預知的迭代順序。<br>
- * 預設按照插入的順序進行顯示.<br>
- * 重複插入一個Key的資料,不會影響到使用的先後順序。<br>
- * 此類避免了HashMap的雜亂無章的使用順序,同時又避免了TreeMap的額外成本.<br>
- *
- * @author 老紫竹 JAVA世紀網(java2000.net)
- *
- */
- public class Lession14LinkedHashMap {
- public static void main(String[] args) {
- // 分別使用2個類,進行相同的資料測試
- // 可以看到,HashMap的順序是不可預測的
- // 而LinkedHashMap的順序嚴格按照插入順序
- // 102=>102; 100=>100; 101=>101; 98=>98; 99=>99;
- testMap(new HashMap());
- // 98=>98; 99=>99; 100=>100; 101=>101; 102=>102;
- testMap(new LinkedHashMap());
- // 刪除資料後,LinkedHashMap會將資料放到末尾最後的位置
- // 而HashMap可能會使用前一個空缺的位置
- }
- public static void testMap(Map map) {
- for (int i = 98; i <= 102; i++) {
- map.put(i, i);
- }
- showMap(map);
- // 嘗試重複插入資料
- map.put(100, 100);
- showMap(map);
- // 刪除資料,並再次插入
- map.remove(100);
- map.put(100, 100);
- showMap(map);
- }
- public static void showMap(Map map) {
- // 迭代Key的操作
- Iterator it = map.keySet().iterator();
- Object key;
- while (it.hasNext()) {
- key = it.next();
- System.out.print(key + "=>" + map.get(key) + "; ");
- }
- System.out.println();
- }
- }
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;