老紫竹JAVA提高教程(14)-认识Map之LinkedHashMap


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;

你可能感兴趣的:(java,工作,.net,String,HashMap,测试)