程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> JAVA提高教程(14)-認識Map之LinkedHashMap

JAVA提高教程(14)-認識Map之LinkedHashMap

編輯:關於JAVA

Java基礎及提高教程目錄

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

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

1.package collection;
2.
3.import java.util.HashMap;
4.import java.util.Iterator;
5.import java.util.LinkedHashMap;
6.import java.util.Map;
7.
8./**
9. * 老紫竹JAVA提高教程(14)-認識Map之LinkedHashMap。
10. * 
11. * 這個類繼承自HashMap,擁有其全部特性.
12. * 同時內部維護著一個所有條目的雙重鏈接,具有可預知的迭代順序。
13. * 默認按照插入的順序進行顯示.
14. * 重復插入一個Key的數據,不會影響到使用的先後順序。
15. * 此類避免了HashMap的雜亂無章的使用順序,同時又避免了TreeMap的額外成本.
16. * 
17. * @author 老紫竹 JAVA世紀網(java2000.net)
18. * 
19. */
20.public class Lession14LinkedHashMap {
21.  public static void main(String[] args) {
22.    // 分別使用2個類,進行相同的數據測試
23.    // 可以看到,HashMap的順序是不可預測的
24.    // 而LinkedHashMap的順序嚴格按照插入順序
25.
26.    // 102=>102; 100=>100; 101=>101; 98=>98; 99=>99;
27.    testMap(new HashMap());
28.    // 98=>98; 99=>99; 100=>100; 101=>101; 102=>102;
29.    testMap(new LinkedHashMap());
30.    
31.    // 刪除數據後,LinkedHashMap會將數據放到末尾最後的位置
32.    // 而HashMap可能會使用前一個空缺的位置
33.  }
34.
35.  public static void testMap(Map map) {
36.    for (int i = 98; i <= 102; i++) {
37.      map.put(i, i);
38.    }
39.    showMap(map);
40.    // 嘗試重復插入數據
41.    map.put(100, 100);
42.    showMap(map);
43.
44.    // 刪除數據,並再次插入
45.    map.remove(100);
46.    map.put(100, 100);
47.    showMap(map);
48.  }
49.
50.  public static void showMap(Map map) {
51.    // 迭代Key的操作
52.    Iterator it = map.keySet().iterator();
53.    Object key;
54.    while (it.hasNext()) {
55.      key = it.next();
56.      System.out.print(key + "=>" + map.get(key) + "; ");
57.    }
58.    System.out.println();
59.  }
60.}

運行效果:

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;
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved