Merlin的魔力: 维护插入顺序 - 编程入门网
LinkedHashMap(int initialCapacity, float loadFactor)
LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder)
LinkedHashMap(Map)
添加的构造函数处理存取顺序选项。把 false 存取顺序作为缺省值, 要获得一个存取顺序的列表,您必须传入一个 true ;也即映射表的头部是使用时间距今最远的映射表条目。 常规 HashMap 的子类 LinkedHashMap 的一个优点是迭代次数不受映射表容量的影响。使用 LinkedHashMap 时,选择大容量对迭代遍历次数没有任何影响, 但使用常规 HashMap 时要影响到性能。 向映射表添加元素要比向集添加元素更加棘手一些,只是因为我们不得不单独 put() 每一对元素。下面的代码并没有什么特别之处, 只是我们要循环遍历月份名称,而不是只向构造函数传递一个 Map 。 清单 6. 填充映射表
幸运的是,与集相同,您可以只调用映射表的 toString() 方法来获取按插入顺序排列的映射表条目。这种调用将以 key=value 的形式返回每个键值对。 清单 7. 显示映射表结果 System.out.println("Ordered: " + orderedMap); System.out.println("Unordered: " + unorderedMap); 已排序的映射表显示如下: 清单 8. 显示已排序的映射表结果 Ordered:
Merlin的魔力: 维护插入顺序(3)时间:2011-02-02 John Zukowski而未排序的映射表显示如下: 清单 9. 显示未排序的映射表结果
要自己核对,您可以迭代。所有的迭代器都知道插入顺序, 所以在接收到值迭代器 ( values() ) 时,您可以按插入顺序遍历那些值,如下所示: 清单 10. 迭代值
显示如下: 清单 11. 显示已排序的值gennaio
按存取顺序访问 我们将要讨论的新类的最后一个方面是 LinkedHashMap 的存取顺序选项。 将 true 传递到 LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder) 构造函数使您能够保持映射表的链表的存取顺序,从使用时间距今最远的到最近使用的。换句话说,新项目被添加到尾部,映射表查找操作将项目移到链表的尾部。最后一点十分重要。因为映射表的典型的读存取操作会改变顺序,如果多个线程可以从映射表读取,就应该同步存取操作。 为了演示,我们可以看几个月份并按新顺序打印: 清单 12. 按存取顺序访问元素
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |