- java.lang.Object
-
- java.util.AbstractCollection<E>
-
- java.util.AbstractSet<E>
-
- java.util.HashSet<E>
-
- java.util.LinkedHashSet<E>
-
- 参数类型
-
E
- 此集维护的元素类型
- 实现的所有接口
-
Serializable
,Cloneable
,Iterable<E>
,Collection<E>
,Set<E>
public class LinkedHashSet<E> extends HashSet<E> implements Set<E>, Cloneable, Serializable
Hash表和
Set
接口的链表实现,具有可预测的迭代顺序。 此实现与HashSet
不同之处在于它维护了一个贯穿其所有条目的双向链表。 此链接列表定义迭代排序,即元素插入集合( 插入顺序 ) 的顺序 。 请注意,如果将元素重新插入到集合中,则不会影响插入顺序。 (如果s.add(e)
在调用之前立即返回true
则调用s.contains(e)
将元素e
重新插入到集s
。)此实现使客户免于
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
。 因此,编写依赖于此异常的程序以确保其正确性是错误的: 迭代器的快速失败行为应该仅用于检测错误。此课程是Java Collections Framework的成员。
- 从以下版本开始:
- 1.4
- 另请参见:
-
Object.hashCode()
,Collection
,Set
,HashSet
,TreeSet
,Hashtable
, Serialized Form
-
-
构造方法摘要
构造方法 构造器 描述 LinkedHashSet()
使用默认初始容量(16)和加载因子(0.75)构造一个新的空链接哈希集。LinkedHashSet(int initialCapacity)
使用指定的初始容量和默认加载因子(0.75)构造一个新的空链接哈希集。LinkedHashSet(int initialCapacity, float loadFactor)
使用指定的初始容量和加载因子构造一个新的空链接哈希集。LinkedHashSet(Collection<? extends E> c)
构造一个新的链接哈希集,其具有与指定集合相同的元素。
-
方法摘要
所有方法 实例方法 具体的方法 变量和类型 方法 描述 Spliterator<E>
spliterator()
在此集合中的元素上创建 late-binding和 失败快速Spliterator
。-
声明方法的类 java.util.AbstractSet
equals, hashCode, removeAll
-
声明方法的类 java.util.AbstractCollection
addAll, containsAll, retainAll, toArray, toArray, toString
-
声明方法的接口 java.util.Collection
parallelStream, removeIf, stream, toArray
-
-
-
-
构造方法详细信息
-
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
- 如果指定的集合为null
-
-
方法详细信息
-
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继承了set迭代器的fail-fast属性。 创建的Spliterator
另外报告Spliterator.SUBSIZED
。 - 结果
-
Spliterator
超过此集合中的元素 - 从以下版本开始:
- 1.8
-
-