JAVA提高教程(14)-认识Map之LinkedHashMap2011-06-13 csdn博客 老紫竹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;