E - 由此集合维护的元素的类型
public class LinkedHashSet<E> extends HashSet<E> implements Set<E>, Cloneable, Serializable
哈希表和链表实现了Set接口,具有可预测的迭代次序。 这种实现不同于HashSet,它维持于所有条目的运行双向链表。 该链表定义了迭代排序,它是将元素插入集合(插入顺序 ) 的顺序 。 请注意,如果一个元件被重新插入到组插入顺序不受影响 。 (元件e重新插入一组s如果当s.contains(e)将返回true之前立即调用s.add(e)被调用。)
此实现可以让客户从提供的指定,通常杂乱无章的排序HashSet ,而不会导致与其相关的成本增加TreeSet 。 它可以用于生成与原始文件具有相同顺序的集合的副本,而不管原始集的实现:
void foo(Set s) {
Set copy = new LinkedHashSet(s);
...
}
如果模块在输入上进行设置,复制它,并且稍后返回其顺序由该副本确定的结果,则此技术特别有用。
(客户一般都喜欢以相同的顺序返回事情。)
该类提供了所有可选的Set操作,并允许null元素。 像HashSet,它提供了基本操作(add,contains和remove)稳定的性能,假定散列函数散桶中适当的元件。 性能可能略低于HashSet ,由于维护链表的额外费用,但有一个例外:LinkedHashSet的迭代需要与集合的大小成比例的时间,无论其容量如何。 HashSet的迭代可能更昂贵,需要与其容量成比例的时间。
链接哈希集具有影响其性能的两个参数: 初始容量和负载因子 。 它们的定义精确到HashSet 。 但是请注意,该惩罚为初始容量选择非常高的值是该类比HashSet不太严重的,因为迭代次数对于这个类是由容量不受影响。
请注意,此实现不同步。 如果多个线程同时访问链接的散列集,并且至少有一个线程修改该集合,那么它必须在外部进行同步。 这通常通过在自然地封装集合的一些对象上进行同步来实现。 如果没有这样的对象存在,则应该使用Collections.synchronizedSet方法“包装”。 这最好在创建时完成,以防止对该集合的意外不同步访问:
Set s = Collections.synchronizedSet(new LinkedHashSet(...));
该类iterator方法返回的迭代器是故障快速的 :如果在创建迭代器之后的任何时间对该集合进行了修改,除了通过迭代器自己的remove方法之外,迭代器将会抛出一个ConcurrentModificationException 。 因此,面对并发修改,迭代器将快速而干净地失败,而不是在未来未确定的时间冒着任意的非确定性行为。
请注意,迭代器的故障快速行为无法保证,因为一般来说,在不同步并发修改的情况下,无法做出任何硬性保证。 失败快速迭代器尽力投入ConcurrentModificationException 。 因此,编写依赖于此异常的程序的正确性将是错误的:迭代器的故障快速行为应仅用于检测错误。
Object.hashCode() , Collection , Set , HashSet , TreeSet , Hashtable , Serialized Form
| Constructor and Description |
|---|
LinkedHashSet()
构造一个具有默认初始容量(16)和负载因子(0.75)的新的,空的链接散列集。
|
LinkedHashSet(Collection<? extends E> c)
构造与指定集合相同的元素的新的链接散列集。
|
LinkedHashSet(int initialCapacity)
构造一个具有指定初始容量和默认负载因子(0.75)的新的,空的链接散列集。
|
LinkedHashSet(int initialCapacity, float loadFactor)
构造具有指定的初始容量和负载因子的新的,空的链接散列集。
|
| Modifier and Type | Method and Description |
|---|---|
Spliterator<E> |
spliterator()
在此集合中的元素上创建
late-binding和
故障快速
Spliterator 。
|
add, clear, clone, contains, isEmpty, iterator, remove, sizeequals, hashCode, removeAlladdAll, containsAll, retainAll, toArray, toArray, toStringfinalize, getClass, notify, notifyAll, wait, wait, waitadd, addAll, clear, contains, containsAll, equals, hashCode, isEmpty, iterator, remove, removeAll, retainAll, size, toArray, toArrayparallelStream, removeIf, streampublic LinkedHashSet(int initialCapacity,
float loadFactor)
initialCapacity - 链接哈希集的初始容量
loadFactor - 链接散列集的负载因子
IllegalArgumentException - 如果初始容量小于零,或者负载因子是非正性的
public LinkedHashSet(int initialCapacity)
initialCapacity -
initialCapacity的初始容量
IllegalArgumentException - 如果初始容量小于零
public LinkedHashSet()
public LinkedHashSet(Collection<? extends E> c)
c - 其元素将被放置到该集合中的集合
NullPointerException - 如果指定的集合为空
public Spliterator<E> spliterator()
Spliterator 。
该Spliterator报告Spliterator.SIZED , Spliterator.DISTINCT和ORDERED 。 实施应记录其他特征值的报告。
spliterator在界面
Iterable<E>
spliterator在接口
Collection<E>
spliterator在接口
Set<E>
spliterator在
HashSet<E>
Iterator创建了一个late-binding拼接Iterator 。
分割器继承集合迭代器的故障快速属性。
创建的Spliterator另外报告Spliterator.SUBSIZED 。
Spliterator在这个集合中的元素
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.