快速业务通道

JAVA提高教程(14)-认识Map之LinkedHashMap - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16

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

时间:2011-06-13 csdn博客 老紫竹

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;

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号