- java.lang.Object
-
- java.util.AbstractCollection<E>
-
- java.util.AbstractSet<E>
-
- java.util.HashSet<E>
-
- java.util.LinkedHashSet<E>
-
- 参数类型
-
E
- 由此集合维护的元素的类型
- All Implemented Interfaces:
-
Serializable
,Cloneable
,Iterable<E>
,Collection<E>
,Set<E>
public class LinkedHashSet<E> extends HashSet<E> implements Set<E>, Cloneable, Serializable
哈希表和链表实现的
Set
接口,具有可预测的迭代次序。 该实现与HashSet
不同之处在于它保持双向链接列表的所有条目。 该链表定义了迭代排序,它是将元素插入集合( 插入顺序 ) 的顺序 。 请注意,如果一个元件被重新插入到组插入顺序不受影响 。 (如果s.add(e)
在调用之前s.contains(e)
将立即返回true
则e
被重新插入到集合s
)。该实施方式使其客户不受
HashSet
提供的未指定的,通常混乱的排序,而不会导致与TreeSet
相关的成本增加。 它可以用于生成与原始文件具有相同顺序的集合的副本,而不管原始集的实现:void foo(Set s) { Set copy = new LinkedHashSet(s); ... }
如果模块在输入上进行设置,复制它,并且稍后返回其顺序由该副本确定的结果,则此技术特别有用。 (客户一般都喜欢以相同的顺序返回事情。)此类提供所有可选的
Set
操作,并允许空元素。 像HashSet
,它提供了基本操作(稳定的性能add
,contains
和remove
),假设散列函数散桶中适当的元件。 性能可能略低于HashSet
,由于维护链表的额外费用,除了一个例外:迭代超过LinkedHashSet
需要与集合的大小成比例的时间,无论其容量如何。HashSet
迭代可能更昂贵,需要与其容量成比例的时间。链接哈希集具有影响其性能的两个参数: 初始容量和负载因子 。 它们被精确定义为
HashSet
。 但是,请注意,对于这个类别HashSet
,选择过高的初始容量值的惩罚不如HashSet
那么严格,因为这个类的迭代次数不受容量的影响。请注意,此实现不同步。 如果多个线程同时访问链接的散列集,并且至少有一个线程修改该集合,那么它必须在外部进行同步。 这通常通过在自然地封装集合的一些对象上进行同步来实现。 如果没有这样的对象存在,那么该集合应该使用
Collections.synchronizedSet
方法“包装”。 这最好在创建时完成,以防止意外的非同步访问集:Set s = Collections.synchronizedSet(new LinkedHashSet(...));
此类的
iterator
方法返回的迭代器是故障快速的 :如果在迭代器创建后的任何时间对该集合进行了修改,除了通过迭代器自己的remove
方法之外,迭代器将抛出一个ConcurrentModificationException
。 因此,面对并发修改,迭代器将快速而干净地失败,而不是在未来未确定的时间冒着任意的非确定性行为。请注意,迭代器的故障快速行为无法保证,因为一般来说,在不同步并发修改的情况下,无法做出任何硬性保证。 失败快速的迭代器
ConcurrentModificationException
扔出ConcurrentModificationException
。 因此,编写依赖于此异常的程序的正确性将是错误的: 迭代器的故障快速行为应仅用于检测错误。这个类是Java Collections Framework的成员。
- 从以下版本开始:
- 1.4
- 另请参见:
-
Object.hashCode()
,Collection
,Set
,HashSet
,TreeSet
,Hashtable
, Serialized Form
-
-
构造方法摘要
构造方法 Constructor 描述 LinkedHashSet()
构造一个具有默认初始容量(16)和负载因子(0.75)的新的,空的链接散列集。LinkedHashSet(int initialCapacity)
构造一个具有指定初始容量和默认负载因子(0.75)的新的,空的链接散列集。LinkedHashSet(int initialCapacity, float loadFactor)
构造具有指定的初始容量和负载因子的新的,空的链接散列集。LinkedHashSet(Collection<? extends E> c)
构造与指定集合相同的元素的新的链接散列集。
-
方法摘要
所有方法 接口方法 具体的方法 Modifier and Type 方法 描述 Spliterator<E>
spliterator()
在此集合中的元素上创建 late-binding和 故障快速Spliterator
。-
Methods inherited from class java.util.AbstractCollection
addAll, containsAll, retainAll, toArray, toArray, toString
-
Methods inherited from class java.util.AbstractSet
equals, hashCode, removeAll
-
Methods inherited from interface java.util.Collection
parallelStream, removeIf, stream
-
Methods inherited from class java.util.HashSet
add, clear, clone, contains, isEmpty, iterator, remove, size
-
-
-
-
构造方法详细信息
-
LinkedHashSet
public LinkedHashSet(int initialCapacity, float loadFactor)
构造具有指定的初始容量和负载因子的新的,空的链接散列集。- 参数
-
initialCapacity
- 链接散列集的初始容量 -
loadFactor
- 链接散列集的负载因子 - 异常
-
IllegalArgumentException
- 如果初始容量小于零,或者负载因子是非正值的
-
LinkedHashSet
public LinkedHashSet(int initialCapacity)
构造一个具有指定初始容量和默认负载因子(0.75)的新的,空的链接散列集。- 参数
-
initialCapacity
- LinkedHashSet的初始容量 - 异常
-
IllegalArgumentException
- 如果初始容量小于零
-
LinkedHashSet
public LinkedHashSet()
构造一个具有默认初始容量(16)和负载因子(0.75)的新的,空的链接散列集。
-
LinkedHashSet
public LinkedHashSet(Collection<? extends E> c)
构造与指定集合相同的元素的新的链接散列集。 创建链接的哈希集合具有足以容纳指定集合中的元素的初始容量和默认负载因子(0.75)。- 参数
-
c
-c
元素放入此集合的集合 - 异常
-
NullPointerException
- 如果指定的集合为空
-
-
方法详细信息
-
spliterator
public Spliterator<E> spliterator()
在此集合中的元素上创建late-binding和故障快速Spliterator
。该
Spliterator
报告Spliterator.SIZED
,Spliterator.DISTINCT
,并ORDERED
。 实施应记录其他特征值的报告。- Specified by:
-
spliterator
在接口Collection<E>
- Specified by:
-
spliterator
接口Iterable<E>
- Specified by:
-
spliterator
在接口Set<E>
- 重写:
-
spliterator
在HashSet<E>
- Implementation Note:
-
该实现从集合的
Iterator
创建了一个late-binding拼接Iterator
。 分割器继承集合迭代器的故障快速属性。 创建的Spliterator
另外报告Spliterator.SUBSIZED
。 - 结果
-
一个
Spliterator
在这个集合中的元素 - 从以下版本开始:
- 1.8
-
-