<b>Merlin的魔力: 保护插入次序</b>[Java编程]
本文“<b>Merlin的魔力: 保护插入次序</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
J2SE 1.4 为 Java Collections Framework 引入了两个新实现, LinkedHashSet 和 LinkedHashMap .增添这两个新实现的好处是散列调集目前可以保护贯串其元素的两条途径.除尺度的散列关系之外,目前还有一个可遍历整个调集的链表.正常情形下,这个新的第二途径会遵守插入次序,这意味着调集的迭代器将按照元素的插入次序返回元素(而不按它们的散列码将其组合成一个调集的次序),但 LinkedHashMap 支持第二种排序选项:按存取次序而非插入次序保护链表.
我们来看一下这些新类是若何工作的.
开始
开始利用这些新类非常简单. 只需导入 java.util 包并找到一组要利用的项目.在我们的示例中,我们将利用日历表的月份.在利用集时我们将利用英语月份名称,在利用映射表时用英语和意大利语的月份名称.
清单 1. 开始定义类
import java.util.*;
public class OrderedAccess {
public static void main(String args[]) {
String months[] =
new DateFormatSymbols().getMonths();
String italianMonths[] =
new DateFormatSymbols(Locale.ITALIAN).getMonths();
}
}
我将假定您已经知道了英语月份的名称温次序.关于那些不熟习意大利语月份名称的人们,它们是:Gennaio、Febbraio、Marzo、Aprile、Maggio、Giugno、Luglio、Agosto、Settembre、Ottobre、Novembre 和 Dicembre, 固然由于某些缘由 getMonths() 返回的名称不是大写的.
利用新 HashSet
LinkedHashSet 是基本 HashSet 类的一个子类.因此, 但凡 HashSet 能做的工作, LinkedHashSet 也能做到. 类中没有新办法.您能得到的只有 4 个构造函数:
LinkedHashSet()
LinkedHashSet(Collection c)
LinkedHashSet(int initialCapacity)
LinkedHashSet(int initialCapacity, float loadFactor)
要向集合增添元素,我们可认为每个元素调用 add() ,或成立一个 Collection 并将它传送到构造函数.因为数组中已经有了元素,所以最简单的机制就是利用 Arrays.asList() ,它会返回一个包装成 List 中的数组,同时保持原始数组的次序.通过将 list 传送到构造函数,我们可以很轻松地将相同的 list 增添到 LinkedHashSet 和简单的 HashSet 中.
清单 2. 填充集
List list = Arrays.asList(months);
Set orderedSet = new LinkedHashSet(list);
Set unorderedSet = new HashSet(list);
在填满了集之后,我们可以查抄它们的元素,看看链接的集能否按插入次序保护其元素, 然后与尺度散列集对比后果.您可以通过集的 iterator() 手工迭代每个集的各个元素,或只调用 toString() 办法(隐式地),实际上就是它为我们做了那些工作.
清单 3. 显示集后果
System.out.println("Ordered: " + orderedSet);
System.out.println("Unordered: " + unorderedSet);
以上是“<b>Merlin的魔力: 保护插入次序</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |