-
- 参数类型
-
E
- 此集维护的元素类型
- All Superinterfaces:
-
Collection<E>
,Iterable<E>
- All Known Subinterfaces:
-
EventSet
,NavigableSet<E>
,SortedSet<E>
- 所有已知实现类:
-
AbstractSet
,ConcurrentHashMap.KeySetView
,ConcurrentSkipListSet
,CopyOnWriteArraySet
,EnumSet
,HashSet
,JobStateReasons
,LinkedHashSet
,TreeSet
public interface Set<E>extends Collection<E>
不包含重复元素的集合。 更正式地说,集合不包含元素对e1
和e2
,使得e1.equals(e2)
和最多一个null元素。 正如其名称所暗示的,此接口模拟数学集抽象。该
Set
接口放置额外的约定,超过从继承Collection
接口,所有构造函数的合同,而位于该合同add
,equals
和hashCode
方法。 为方便起见,此处还包括其他继承方法的声明。 (这些声明附带的规范是针对Set
接口定制的,但它们不包含任何其他规定。)对构造函数的额外规定,毫不奇怪,所有构造函数必须创建一个不包含重复元素的集合(如上所定义)。
注意:如果将可变对象用作set元素,则必须非常小心。 如果在对象是集合中的元素时以影响
equals
比较的方式更改对象的值,则不指定集合的行为。 这种禁令的一个特例是,不允许将一个集合作为一个元素包含在内。某些集合实现对它们可能包含的元素有限制。 例如,某些实现禁止null元素,并且一些实现对其元素的类型有限制。 尝试添加不合格的元素会引发未经检查的异常,通常为
NullPointerException
或ClassCastException
。 试图查询不合格元素的存在可能会引发异常,或者它可能只是返回false; 一些实现将展示前一种行为,一些将展示后者。 更一般地,尝试对不合格的元素进行操作,其完成不会导致将不合格的元素插入到集合中,可以在实现的选择中抛出异常或者它可以成功。 此类异常在此接口的规范中标记为“可选”。Unmodifiable Sets
Set.of
和Set.copyOf
静态工厂方法提供了创建不可修改集的便捷方法。 这些方法创建的Set
实例具有以下特征:- 他们是unmodifiable 。 无法添加或删除元素。 在Set上调用任何mutator方法将始终导致抛出
UnsupportedOperationException
。 但是,如果包含的元素本身是可变的,则可能导致Set表现不一致或其内容似乎发生变化。 - 他们不允许
null
元素。 尝试使用null
元素创建它们导致NullPointerException
。 - 如果所有元素都可序列化,则它们是可序列化的。
- 他们在创建时拒绝重复元素。 传递给静态工厂方法的重复元素导致
IllegalArgumentException
。 - set元素的迭代顺序未指定,可能会发生变化。
- 他们是value-based 。 调用者不应对返回实例的身份做出任何假设。 工厂可以自由创建新实例或重用现有实例。 因此,对这些实例的身份敏感操作(引用相等(
==
),身份哈希代码和同步)是不可靠的,应该避免。 - 它们按照Serialized Form页面上的指定进行序列化。
此接口是Java Collections Framework的成员。
- 从以下版本开始:
- 1.2
- 另请参见:
-
Collection
,List
,SortedSet
,HashSet
,TreeSet
,AbstractSet
,Collections.singleton(java.lang.Object)
,Collections.EMPTY_SET
-
-
方法摘要
所有方法 静态方法 实例方法 抽象方法 Default Methods 变量和类型 方法 描述 boolean
add(E e)
如果指定的元素尚不存在,则将其添加到此集合(可选操作)。boolean
addAll(Collection<? extends E> c)
如果指定集合中的所有元素尚未存在(可选操作),则将其添加到此集合中。void
clear()
从该集合中删除所有元素(可选操作)。boolean
contains(Object o)
如果此set包含指定的元素,则返回true
。boolean
containsAll(Collection<?> c)
如果此集合包含指定集合的所有元素,则返回true
。static <E> Set<E>
copyOf(Collection<? extends E> coll)
返回包含给定Collection的元素的 unmodifiable Set 。boolean
equals(Object o)
将指定对象与此set进行相等性比较。int
hashCode()
返回此set的哈希码值。boolean
isEmpty()
如果此集合不包含任何元素,则返回true
。Iterator<E>
iterator()
返回此set中元素的迭代器。static <E> Set<E>
of()
返回包含零元素的不可修改集。static <E> Set<E>
of(E e1)
返回包含一个元素的不可修改集。static <E> Set<E>
of(E... elements)
返回包含任意数量元素的不可修改集。static <E> Set<E>
of(E e1, E e2)
返回包含两个元素的不可修改集。static <E> Set<E>
of(E e1, E e2, E e3)
返回包含三个元素的不可修改集。static <E> Set<E>
of(E e1, E e2, E e3, E e4)
返回包含四个元素的不可修改集。static <E> Set<E>
of(E e1, E e2, E e3, E e4, E e5)
返回包含五个元素的不可修改集。static <E> Set<E>
of(E e1, E e2, E e3, E e4, E e5, E e6)
返回包含六个元素的不可修改集。static <E> Set<E>
of(E e1, E e2, E e3, E e4, E e5, E e6, E e7)
返回包含七个元素的不可修改集。static <E> Set<E>
of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8)
返回包含八个元素的不可修改集。static <E> Set<E>
of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9)
返回包含九个元素的不可修改集。static <E> Set<E>
of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9, E e10)
返回包含十个元素的不可修改集。boolean
remove(Object o)
如果存在,则从该集合中移除指定的元素(可选操作)。boolean
removeAll(Collection<?> c)
从此集合中删除指定集合中包含的所有元素(可选操作)。boolean
retainAll(Collection<?> c)
仅保留此集合中包含在指定集合中的元素(可选操作)。int
size()
返回此集合中的元素数(基数)。default Spliterator<E>
spliterator()
在此集合中的元素上创建Spliterator
。Object[]
toArray()
返回包含此set中所有元素的数组。<T> T[]
toArray(T[] a)
返回一个包含此set中所有元素的数组; 返回数组的运行时类型是指定数组的运行时类型。-
声明方法的接口 java.util.Collection
parallelStream, removeIf, stream, toArray
-
-
-
-
方法详细信息
-
size
int size()
返回此集合中的元素数(基数)。 如果此集包含超过Integer.MAX_VALUE
元素,则返回Integer.MAX_VALUE
。- Specified by:
-
size
接口Collection<E>
- 结果
- 此集合中的元素数量(基数)
-
isEmpty
boolean isEmpty()
如果此集合不包含任何元素,则返回true
。- Specified by:
-
isEmpty
接口Collection<E>
- 结果
-
true
如果此集合不包含任何元素
-
contains
boolean contains(Object o)
如果此set包含指定的元素,则返回true
。 更正式地说,返回true
当且仅当此set包含的元素e
,使得Objects.equals(o, e)
。- Specified by:
-
contains
在界面Collection<E>
- 参数
-
o
- 要测试其在此集合中的存在的元素 - 结果
-
true
如果此集包含指定的元素 - 异常
-
ClassCastException
- 如果指定元素的类型与此集不兼容( optional ) -
NullPointerException
- 如果指定的元素为null且此set不允许null元素( optional )
-
toArray
Object[] toArray()
返回包含此set中所有元素的数组。 如果此set对其迭代器返回的元素的顺序做出任何保证,则此方法必须以相同的顺序返回元素。返回的数组将是“安全的”,因为该集合不维护对它的引用。 (换句话说,即使此数组由数组支持,此方法也必须分配一个新数组)。 因此调用者可以自由修改返回的数组。
此方法充当基于阵列和基于集合的API之间的桥梁。
- Specified by:
-
toArray
接口Collection<E>
- 结果
- 包含此集合中所有元素的数组
-
toArray
<T> T[] toArray(T[] a)
返回一个包含此set中所有元素的数组; 返回数组的运行时类型是指定数组的运行时类型。 如果集合适合指定的数组,则返回其中。 否则,将使用指定数组的运行时类型和此set的大小分配新数组。如果此集合适合指定的数组,并且有空余空间(即,数组的元素多于此集合),则紧跟集合结尾的数组中的元素将设置为
null
。 ( 仅当调用者知道此集合不包含任何null元素时,这在确定此集合的长度时很有用。)如果此set对其迭代器返回的元素的顺序做出任何保证,则此方法必须以相同的顺序返回元素。
与
toArray()
方法一样,此方法充当基于阵列和基于集合的API之间的桥梁。 此外,该方法允许精确控制输出阵列的运行时类型,并且在某些情况下可以用于节省分配成本。假设
x
是已知仅包含字符串的集合。 以下代码可用于将集合转储到新分配的String
数组中:String[] y = x.toArray(new String[0]);
请注意,toArray(new Object[0])
功能与toArray()
相同。- Specified by:
-
toArray
接口Collection<E>
- 参数类型
-
T
- 要包含集合的数组的组件类型 - 参数
-
a
- 要存储此集合的元素的数组(如果它足够大); 否则,为此目的分配相同运行时类型的新数组。 - 结果
- 包含此集合中所有元素的数组
- 异常
-
ArrayStoreException
- 如果指定数组的运行时类型不是此集合中每个元素的运行时类型的超类型 -
NullPointerException
- 如果指定的数组为null
-
add
boolean add(E e)
如果指定的元素尚不存在,则将其添加到此集合(可选操作)。 更正式地说,如果集合中不包含元素e2
,Objects.equals(e, e2)
指定的元素e
添加到此集合中,如Objects.equals(e, e2)
。 如果此set已包含该元素,则调用将保持set不变并返回false
。 结合对构造函数的限制,这可以确保集合永远不会包含重复元素。上述规定并不意味着集合必须接受所有要素; sets可以拒绝添加任何特定元素,包括
null
,并抛出异常,如Collection.add
的规范中所述 。 单个集合实现应清楚地记录对它们可能包含的元素的任何限制。- Specified by:
-
add
接口Collection<E>
- 参数
-
e
- 要添加到此集合的元素 - 结果
-
true
如果此集合尚未包含指定的元素 - 异常
-
UnsupportedOperationException
- 如果此集合不支持add
操作 -
ClassCastException
- 如果指定元素的类阻止将其添加到此集合中 -
NullPointerException
- 如果指定的元素为null且此set不允许null元素 -
IllegalArgumentException
- 如果指定元素的某些属性阻止将其添加到此集合中
-
remove
boolean remove(Object o)
如果存在,则从该集合中移除指定的元素(可选操作)。 更正式地,如果该集合包含这样的元素,则移除元素e
,使得Objects.equals(o, e)
。 如果此集合包含元素,则返回true
(或等效地,如果此集合因调用而更改)。 (一旦调用返回,该集合将不包含该元素。)- Specified by:
-
remove
接口Collection<E>
- 参数
-
o
- 要从此集合中删除的对象(如果存在) - 结果
-
true
如果此set包含指定的元素 - 异常
-
ClassCastException
- 如果指定元素的类型与此集不兼容( optional ) -
NullPointerException
- 如果指定的元素为null且此set不允许null元素( optional ) -
UnsupportedOperationException
- 如果此集合不支持remove
操作
-
containsAll
boolean containsAll(Collection<?> c)
如果此集合包含指定集合的所有元素,则返回true
。 如果指定的集合也是集合,则此方法返回true
如果它是此集合的子集)。- Specified by:
-
containsAll
接口Collection<E>
- 参数
-
c
- 要检查此集合中的包含的集合 - 结果
-
true
如果此集包含指定集合的所有元素 - 异常
-
ClassCastException
- 如果指定集合中的一个或多个元素的类型与此集不兼容( optional ) -
NullPointerException
- 如果指定的集合包含一个或多个null元素,并且此set不允许null元素( optional ),或者指定的集合为null - 另请参见:
-
contains(Object)
-
addAll
boolean addAll(Collection<? extends E> c)
如果指定集合中的所有元素尚未存在(可选操作),则将其添加到此集合中。 如果指定的集合也是一个集合,则addAll
操作会有效地修改此集合,以使其值为两个集合的并集。 如果在操作正在进行时修改了指定的集合,则此操作的行为是不确定的。- Specified by:
-
addAll
接口Collection<E>
- 参数
-
c
- 包含要添加到此集合的元素的集合 - 结果
-
true
如果此设置因呼叫而更改 - 异常
-
UnsupportedOperationException
- 如果此集合不支持addAll
操作 -
ClassCastException
- 如果指定集合的元素的类阻止将其添加到此集合中 -
NullPointerException
- 如果指定的集合包含一个或多个null元素,并且此集合不允许null元素,或者指定的集合为null -
IllegalArgumentException
- 如果指定集合的某个元素的某些属性阻止将其添加到此集合中 - 另请参见:
-
add(Object)
-
retainAll
boolean retainAll(Collection<?> c)
仅保留此集合中包含在指定集合中的元素(可选操作)。 换句话说,从该集合中删除未包含在指定集合中的所有元素。 如果指定的集合也是一个集合,则此操作会有效地修改此集合,使其值为两个集合的交集 。- Specified by:
-
retainAll
在界面Collection<E>
- 参数
-
c
- 包含要在此集中保留的元素的集合 - 结果
-
true
如果此设置因呼叫而更改 - 异常
-
UnsupportedOperationException
- 如果此集合不支持retainAll
操作 -
ClassCastException
- 如果此集合的元素的类与指定的集合不兼容( optional ) -
NullPointerException
- 如果此set包含null元素且指定的collection不允许null元素( optional ),或者指定的collection是null - 另请参见:
-
remove(Object)
-
removeAll
boolean removeAll(Collection<?> c)
从此集合中删除指定集合中包含的所有元素(可选操作)。 如果指定的集合也是一个集合,则此操作会有效地修改此集合,以使其值为两个集合的不对称集合差异 。- Specified by:
-
removeAll
接口Collection<E>
- 参数
-
c
- 包含要c
集合中删除的元素的集合 - 结果
-
true
如果此设置因呼叫而更改 - 异常
-
UnsupportedOperationException
- 如果此集合不支持removeAll
操作 -
ClassCastException
- 如果此集合的元素的类与指定的集合不兼容( optional ) -
NullPointerException
- 如果此set包含null元素且指定的collection不允许null元素( optional ),或者指定的collection是null - 另请参见:
-
remove(Object)
,contains(Object)
-
clear
void clear()
从该集合中删除所有元素(可选操作)。 此调用返回后,该集将为空。- Specified by:
-
clear
接口Collection<E>
- 异常
-
UnsupportedOperationException
- 如果此集不支持clear
方法
-
equals
boolean equals(Object o)
将指定对象与此set进行相等性比较。 如果指定的对象也是一个集合,则返回true
,这两个集合具有相同的大小,并且指定集合的每个成员都包含在此集合中(或者等效地,此集合的每个成员都包含在指定的集合中)。 此定义确保equals方法在set接口的不同实现中正常工作。- Specified by:
-
equals
接口Collection<E>
- 重写:
-
equals
在类Object
- 参数
-
o
- 要与此集进行相等性比较的对象 - 结果
-
true
如果指定的对象等于此set - 另请参见:
-
Object.hashCode()
,HashMap
-
hashCode
int hashCode()
返回此set的哈希码值。 集合的哈希码被定义为集合中元素的哈希码的总和,其中null
元素的哈希码被定义为零。 这确保了s1.equals(s2)
暗示s1.hashCode()==s2.hashCode()
对于任何两组s1
和s2
,如s2
的一般合同所要求的那样 。- Specified by:
-
hashCode
接口Collection<E>
- 重写:
-
hashCode
类Object
- 结果
- 此集的哈希码值
- 另请参见:
-
Object.equals(Object)
,equals(Object)
-
spliterator
default Spliterator<E> spliterator()
在此集合中的元素上创建Spliterator
。Spliterator
报告Spliterator.DISTINCT
。 实施应记录其他特征值的报告。- Specified by:
-
spliterator
接口Collection<E>
- Specified by:
-
spliterator
接口Iterable<E>
- 实现要求:
- 默认实现从集合
Iterator
创建late-binding分裂Iterator
。 spliterator继承了set迭代器的fail-fast属性。创建的
Spliterator
另外报告Spliterator.SIZED
。 - Implementation Note:
- 创建的
Spliterator
另外报告Spliterator.SUBSIZED
。 - 结果
- 一组
Spliterator
- 从以下版本开始:
- 1.8
-
of
static <E> Set<E> of()
返回包含零元素的不可修改集。 有关详细信息,请参阅Unmodifiable Sets 。- 参数类型
-
E
-Set
的元素类型 - 结果
- 空的
Set
- 从以下版本开始:
- 9
-
of
static <E> Set<E> of(E e1)
返回包含一个元素的不可修改集。 有关详细信息,请参阅Unmodifiable Sets 。- 参数类型
-
E
-Set
的元素类型 - 参数
-
e1
- 单个元素 - 结果
- 包含指定元素的
Set
- 异常
-
NullPointerException
- 如果元素是null
- 从以下版本开始:
- 9
-
of
static <E> Set<E> of(E e1, E e2)
返回包含两个元素的不可修改集。 有关详细信息,请参见Unmodifiable Sets 。- 参数类型
-
E
-Set
的元素类型 - 参数
-
e1
- 第一个元素 -
e2
- 第二个元素 - 结果
- 包含指定元素的
Set
- 异常
-
IllegalArgumentException
- 如果元素是重复的 -
NullPointerException
- 如果元素是null
- 从以下版本开始:
- 9
-
of
static <E> Set<E> of(E e1, E e2, E e3)
返回包含三个元素的不可修改集。 有关详细信息,请参阅Unmodifiable Sets 。- 参数类型
-
E
-Set
的元素类型 - 参数
-
e1
- 第一个元素 -
e2
- 第二个元素 -
e3
- 第三个要素 - 结果
- 包含指定元素的
Set
- 异常
-
IllegalArgumentException
- 如果有任何重复的元素 -
NullPointerException
- 如果元素是null
- 从以下版本开始:
- 9
-
of
static <E> Set<E> of(E e1, E e2, E e3, E e4)
返回包含四个元素的不可修改集。 有关详细信息,请参阅Unmodifiable Sets 。- 参数类型
-
E
-Set
的元素类型 - 参数
-
e1
- 第一个元素 -
e2
- 第二个元素 -
e3
- 第三个要素 -
e4
- 第四个要素 - 结果
- 包含指定元素的
Set
- 异常
-
IllegalArgumentException
- 如果有任何重复的元素 -
NullPointerException
- 如果元素是null
- 从以下版本开始:
- 9
-
of
static <E> Set<E> of(E e1, E e2, E e3, E e4, E e5)
返回包含五个元素的不可修改集。 有关详细信息,请参阅Unmodifiable Sets 。- 参数类型
-
E
-Set
的元素类型 - 参数
-
e1
- 第一个元素 -
e2
- 第二个元素 -
e3
- 第三个要素 -
e4
- 第四个要素 -
e5
- 第五个元素 - 结果
- 包含指定元素的
Set
- 异常
-
IllegalArgumentException
- 如果有任何重复的元素 -
NullPointerException
- 如果元素是null
- 从以下版本开始:
- 9
-
of
static <E> Set<E> of(E e1, E e2, E e3, E e4, E e5, E e6)
返回包含六个元素的不可修改集。 有关详细信息,请参阅Unmodifiable Sets 。- 参数类型
-
E
-Set
的元素类型 - 参数
-
e1
- 第一个元素 -
e2
- 第二个元素 -
e3
- 第三个要素 -
e4
- 第四个要素 -
e5
- 第五个元素 -
e6
- 第六个元素 - 结果
- 包含指定元素的
Set
- 异常
-
IllegalArgumentException
- 如果有任何重复的元素 -
NullPointerException
- 如果元素是null
- 从以下版本开始:
- 9
-
of
static <E> Set<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7)
返回包含七个元素的不可修改集。 有关详细信息,请参阅Unmodifiable Sets 。- 参数类型
-
E
-Set
的元素类型 - 参数
-
e1
- 第一个元素 -
e2
- 第二个元素 -
e3
- 第三个要素 -
e4
- 第四个要素 -
e5
- 第五个元素 -
e6
- 第六个元素 -
e7
- 第七个元素 - 结果
- 包含指定元素的
Set
- 异常
-
IllegalArgumentException
- 如果有任何重复的元素 -
NullPointerException
- 如果元素是null
- 从以下版本开始:
- 9
-
of
static <E> Set<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8)
返回包含八个元素的不可修改集。 有关详细信息,请参阅Unmodifiable Sets 。- 参数类型
-
E
-Set
的元素类型 - 参数
-
e1
- 第一个元素 -
e2
- 第二个元素 -
e3
- 第三个要素 -
e4
- 第四个要素 -
e5
- 第五个元素 -
e6
- 第六个元素 -
e7
- 第七个元素 -
e8
- 第八个元素 - 结果
- 包含指定元素的
Set
- 异常
-
IllegalArgumentException
- 如果有任何重复的元素 -
NullPointerException
- 如果元素是null
- 从以下版本开始:
- 9
-
of
static <E> Set<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9)
返回包含九个元素的不可修改集。 有关详细信息,请参阅Unmodifiable Sets 。- 参数类型
-
E
-Set
的元素类型 - 参数
-
e1
- 第一个元素 -
e2
- 第二个元素 -
e3
- 第三个要素 -
e4
- 第四个要素 -
e5
- 第五个元素 -
e6
- 第六个元素 -
e7
- 第七个元素 -
e8
- 第八个元素 -
e9
- 第九个元素 - 结果
- 包含指定元素的
Set
- 异常
-
IllegalArgumentException
- 如果有任何重复的元素 -
NullPointerException
- 如果元素是null
- 从以下版本开始:
- 9
-
of
static <E> Set<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9, E e10)
返回包含十个元素的不可修改集。 有关详细信息,请参见Unmodifiable Sets 。- 参数类型
-
E
-Set
的元素类型 - 参数
-
e1
- 第一个元素 -
e2
- 第二个元素 -
e3
- 第三个要素 -
e4
- 第四个要素 -
e5
- 第五个元素 -
e6
- 第六个元素 -
e7
- 第七个要素 -
e8
- 第八个元素 -
e9
- 第九个元素 -
e10
- 第十个元素 - 结果
- 包含指定元素的
Set
- 异常
-
IllegalArgumentException
- 如果有任何重复的元素 -
NullPointerException
- 如果元素是null
- 从以下版本开始:
- 9
-
of
@SafeVarargsstatic <E> Set<E> of(E... elements)
返回包含任意数量元素的不可修改集。 有关详细信息,请参阅Unmodifiable Sets 。- API Note:
- 此方法还接受单个数组作为参数。 结果集的元素类型将是数组的组件类型,并且集的大小将等于数组的长度。 要使用作为数组的单个元素创建集,请执行以下操作:
String[] array = ... ; Set<String[]> list = Set.<String[]>of(array);
Set.of(E)
方法。 - 参数类型
-
E
-Set
的元素类型 - 参数
-
elements
- 要包含在集合中的元素 - 结果
- 包含指定元素的
Set
- 异常
-
IllegalArgumentException
- 如果有任何重复的元素 -
NullPointerException
- 如果元素是null
或者数组是null
- 从以下版本开始:
- 9
-
copyOf
static <E> Set<E> copyOf(Collection<? extends E> coll)
返回包含给定Collection的元素的unmodifiable Set 。 给定的Collection不能为null,并且不能包含任何null元素。 如果给定的Collection包含重复元素,则保留重复项的任意元素。 如果随后修改了给定的Collection,则返回的Set将不会反映此类修改。- Implementation Note:
- 如果给定的Collection是 unmodifiable Set ,则调用copyOf通常不会创建副本。
- 参数类型
-
E
-Set
的元素类型 - 参数
-
coll
-Collection
绘制元素的Collection
必须为非null - 结果
-
Set
包含给定Collection
的元素 - 异常
-
NullPointerException
- 如果coll为null,或者它包含任何空值 - 从以下版本开始:
- 10
-
-