E
-集合中元素的类型
public interface Collection<E> extends Iterable<E>
袋子或重集(无序集合,可以包含重复元素)应该直接实现该接口。
通用Collection实现类(通常实施Collection间接通过其子接口)应提供两个“标准”的构造函数:void(无参数)的构造函数,它创建一个空的集合,和一个带有一个参数的类型Collection构造函数,创建一个新的集合作为参数相同的元素。实际上,后者的构造函数允许用户复制任何集合,产生所需的实现类型的等效集合。没有办法执行本公约(因为接口不能包含构造函数)但所有的java平台库的通用Collection实现均。
“破坏性”的方法包含在这个界面,即方法,修改其操作集合,规定如果集合不支持操作把UnsupportedOperationException。如果是这样的话,这些方法可以,但不要求,如果调用会抛出一个UnsupportedOperationException收集无影响。例如,调用addAll(Collection)
方法在不可更新的集合,但不是必需的,如果要被添加的集合是空抛出异常。
Some collection implementations have restrictions on the elements that they may contain.例如,某些实现禁止null元素,和一些对元素的类型有限制。试图插入一个不合适的元素会抛出未检查异常,通常NullPointerException或ClassCastException。试图查询一个不合适的元素的存在可能会抛出一个异常,也可能返回false;有些实现会表现出以前的行为和表现出后者。更普遍的是,试图在一个不合格的元件,其完成的操作不会导致一个不合适的元素插入到集合可能抛出一个异常,也可能是成功的,在实施期权。这样的异常被标记为“可选”在该接口的规范中。
它是由每个集合来确定其自己的同步策略。在一个强大的无保障的实施,未定义的行为可能导致的一个集合,是由另一个线程突变的任何方法的调用;这包括直接调用,通过收集到的可能执行调用的方法,并利用现有的迭代器对集合。
在集合框架接口的方法很多,在equals
方法定义。例如,对于contains(Object o)
方法的规范说:“返回true当且仅当这个集合包含至少一个元素e这样(o==null ? e==null : o.equals(e))”。本规范应不被解释为意味着调用Collection.contains具有非空参数o会造成o.equals(e)是任何元素e调用。实现免费实施优化,equals调用是可以避免的,例如,通过比较两个元素的散列码。(这Object.hashCode()
规范保证两不等哈希代码的对象不能等同。)更普遍的是,不同的集合框架接口的实现可以利用指定的行为标的Object
方法实现者认为适当的地方。
一些执行递归遍历集合的集合操作可能会失败,异常为自引用实例,其中集合直接或间接包含它本身。这包括clone()
,equals()
,hashCode()
和toString()
方法。实现可能有选择地处理自引用的情况,但是大多数当前实现不这样做。
该接口的 Java Collections Framework成员。
Collection
实施特定的同步协议,那么它必须重写默认的实现应用协议。
Set
,
List
,
Map
,
SortedSet
,
SortedMap
,
HashSet
,
TreeSet
,
ArrayList
,
LinkedList
,
Vector
,
Collections
,
Arrays
,
AbstractCollection
Modifier and Type | Method and Description |
---|---|
boolean |
add(E e)
确保此集合包含指定的元素(可选操作)。
|
boolean |
addAll(Collection<? extends E> c)
将指定集合中的所有元素添加到这个集合(可选操作)。
|
void |
clear()
从这个集合中移除所有的元素(可选操作)。
|
boolean |
contains(Object o)
返回
true如果集合包含指定元素。
|
boolean |
containsAll(Collection<?> c)
返回
true如果这个集合包含指定集合的所有元素。
|
boolean |
equals(Object o)
将指定的对象与此集合进行比较,以进行相等性。
|
int |
hashCode()
返回此集合的哈希代码值。
|
boolean |
isEmpty()
返回
true如果集合不包含任何元素。
|
Iterator<E> |
iterator()
返回此集合中的元素的迭代器。
|
default Stream<E> |
parallelStream()
返回一个可能并行
Stream 与集合的来源。
|
boolean |
remove(Object o)
从这个集合中移除指定元素的一个实例,如果它是存在的(可选操作)。
|
boolean |
removeAll(Collection<?> c)
删除此集合中包含的所有元素(可选操作)的所有元素(可选操作)。
|
default boolean |
removeIf(Predicate<? super E> filter)
删除满足给定谓词的这个集合的所有元素。
|
boolean |
retainAll(Collection<?> c)
仅保留包含在指定集合中的这个集合中的元素(可选操作)。
|
int |
size()
返回此集合中的元素的数目。
|
default Spliterator<E> |
spliterator()
创建此集合中的元素的
Spliterator 。
|
default Stream<E> |
stream()
返回一个序列
Stream 与集合的来源。
|
Object[] |
toArray()
返回包含此集合中所有元素的数组。
|
<T> T[] |
toArray(T[] a)
返回包含此集合中所有元素的数组;返回数组的运行时类型是指定的数组的运行时类型。
|
int size()
boolean isEmpty()
boolean contains(Object o)
o
-集合中存在的元素进行测试
ClassCastException
-如果指定元素的类型与集合不相容(
optional)
NullPointerException
-如果指定元素为null,集合不允许null元素(
optional)
Object[] toArray()
返回的数组将是“安全”的,没有引用它是由这个集合维护的。换句话说,这种方法必须分配一个新的数组,即使这个集合是由一个数组的支持。因此,调用方可以自由修改返回的数组。
此方法作为基于数组和基于集合的原料药之间的桥梁。
<T> T[] toArray(T[] a)
如果集合符合指定数组中剩余的空间(即数组有比这更多的元素的集合),在阵列采集结束后立即的元素设置为null。(这是有用的在确定这个集合只有长度如果调用者知道集合不包含任何null元素。)
如果这个集合对命令它的迭代器返回的元素有什么样的保证,则该方法必须返回相同的顺序中的元素。
像toArray()
方法,该方法作为之间的桥梁,基于阵列和基于集合API。此外,该方法允许对输出数组的运行时类型的精确控制,并在某些情况下,可用于节省分配成本。
假设x是一个集合称为只包含字符串。下面的代码可以用来把收集到新分配的数组String:
字符串[] y = x.toarray(新弦[ 0 ]);注意 toArray(new Object[0])是相同的功能, toArray()。
T
-数组的运行时类型包含集合
a
-为这个集合的元素被存储数组,如果它足够大;否则,一个新的运行时类型相同的数组分配给这个目的。
ArrayStoreException
-如果指定数组的运行时类型是不是一个超集合中每个元素运行时类型
NullPointerException
-如果指定的数组是空的
boolean add(E e)
支持此操作的集合可能会将此集合中的元素添加到什么元素上的限制。特别是,一些集合拒绝加入null元素,和其他人将加入元素的类型限制。集合类应该在他们的文档中明确指定任何可能添加的元素的限制。
如果一个集合不添加其他比它已经包含元素的任何理由一个特定的元素,它必须抛出一个异常(而不是返回false)。这保持了一个集合总是包含指定元素的不变的,在此调用返回后。
e
-集合中存在的元素来保证
UnsupportedOperationException
-如果
add操作不支持这个行业
ClassCastException
-如果指定元素类型阻止其加入收藏
NullPointerException
-如果指定元素为null,集合不允许null元素
IllegalArgumentException
-如果对元素的一些特性阻止其加入收藏
IllegalStateException
-如果元素不能被添加在这个时候由于插入的限制
boolean remove(Object o)
o
元要从集合中删除,如果存在
ClassCastException
-如果指定元素的类型与集合不相容(
optional)
NullPointerException
-如果指定元素为null,集合不允许null元素(
optional)
UnsupportedOperationException
-如果
remove操作不支持这个行业
boolean containsAll(Collection<?> c)
c
采集被测试集合中是否包含
ClassCastException
-如果指定集合的一个或多个元素的类型与集合不相容(
optional)
NullPointerException
-如果指定集合包含一个或多个null元素和集合不允许null元素(
optional),或者指定集合为空。
contains(Object)
boolean addAll(Collection<? extends E> c)
c
收集包含的元素被添加到这个集合
UnsupportedOperationException
-如果
addAll操作不支持这个行业
ClassCastException
-如果指定集合的一个元素类阻止其加入收藏
NullPointerException
-如果指定集合包含一个null元素和集合不允许null元素,或者指定集合为空
IllegalArgumentException
-如果指定集合的一个元素的一些特性阻止其加入收藏
IllegalStateException
-如果不是所有的元素都可以在这个时候加入由于插入的限制
add(Object)
boolean removeAll(Collection<?> c)
c
收集包含要从集合中删除的元素
UnsupportedOperationException
-如果
removeAll方法不支持这个行业
ClassCastException
-如果在这个集合的一个或多个元素的类型与指定集合不相容(
optional)
NullPointerException
-如果这个集合包含一个或多个null元素而指定集合不支持null元素(
optional),或者指定集合为空
remove(Object)
,
contains(Object)
default boolean removeIf(Predicate<? super E> filter)
iterator()
。每个匹配的元素,删除使用
Iterator.remove()
。如果集合的迭代器不支持去除然后
UnsupportedOperationException
将抛出第一个匹配的元素。
filter
-谓词返回的元素被删除
true
true
如果任何被删除元素
NullPointerException
-如果指定的过滤器是空的
UnsupportedOperationException
如果不能从集合中删除元素。实现可能会抛出这个异常,如果一个匹配元素不能被删除或如果,在一般情况下,不支持删除。
boolean retainAll(Collection<?> c)
c
收集包含元素被保留在这个集合
UnsupportedOperationException
-如果
retainAll操作不支持这个行业
ClassCastException
-如果在这个集合的一个或多个元素的类型与指定集合不相容(
optional)
NullPointerException
-如果这个集合包含一个或多个null元素而指定集合不允许null元素(
optional),或者指定集合为空
remove(Object)
,
contains(Object)
void clear()
UnsupportedOperationException
-如果
clear操作不支持这个行业
boolean equals(Object o)
而Collection接口没有增加规定为Object.equals总承包,程序员实现Collection接口“直接”(换句话说,创建一个类,是一种Collection但不是Set或List)必须选择是否覆盖Object.equals保健操。这是不必要的,而最简单的行动是依靠Object的实施,但实施者可能希望实现“价值比较”在默认的“参考比较的地方。”(这List和Set接口授权这样的价值比较。)
这等于必须对称的Object.equals法国总承包(换句话说,a.equals(b)当且仅当b.equals(a))。对于List.equals和Set.equals状态列表只等于其他列表的合同,并设置其他设置。因此,为实现既不List也Set接口必须返回false当这个集合是比任何列表或集合类的自定义equals方法。(按照同样的逻辑,它是不可能写一个类,正确实现了Set和List接口。)
equals
方法重写,继承类
Object
o
对象同当前集合比较相等性
Object.equals(Object)
,
Set.equals(Object)
,
List.equals(Object)
int hashCode()
hashCode
方法重写,继承类
Object
Object.hashCode()
,
Object.equals(Object)
default Spliterator<E> spliterator()
Spliterator
。实现应该文档特征值的spliterator报道。这样的特征值是不需要报道如果spliterator报道
Spliterator.SIZED
和这个集合不包含任何元素。
默认的实现必须通过子类,可以返回一个更有效的spliterator重写。为了保持预期的懒惰行为的stream()
和parallelStream()
}方法,spliterators应该有CONCURRENT
IMMUTABLE
或特征,或是后期绑定。如果这些都不实用,重要的类应描述spliterator记录政策结合和结构的干扰,并应覆盖stream()
和parallelStream()
方法使用Supplier
的spliterator创建流,如:
Stream<E> s = StreamSupport.stream(() -> spliterator(), spliteratorCharacteristics)
这些要求以确保stream()
和parallelStream()
方法产生的数据流将反映的内容集合终端的流操作启动。
spliterator
接口
Iterable<E>
Iterator
后期绑定spliterator。的spliterator继承快速失败属性集合的迭代器。
创建Spliterator
报道Spliterator.SIZED
。
Spliterator
另外报道
Spliterator.SUBSIZED
。
如果一个spliterator涵盖任何元素然后附加特征值的报告,除此之外,SIZED
和SUBSIZED
,没有帮助客户控制、专业化或简化计算。然而,这也使一个不变的、空虚的spliterator实例共享使用(见Spliterators.emptySpliterator()
)为空集合,并使客户能够确定这样一个spliterator涵盖任何元素。
Spliterator
default Stream<E> stream()
Stream
与集合的来源。
这种方法应该被重写时,spliterator()
方法不能返回spliterator,IMMUTABLE
,CONCURRENT
,或后期绑定。(见spliterator()
详情。)
Spliterator
顺序
Stream
。
Stream
default Stream<E> parallelStream()
Stream
与集合的来源。它是允许的,这种方法返回一个连续的流。
这种方法应该被重写时,spliterator()
方法不能返回spliterator,IMMUTABLE
,CONCURRENT
,或后期绑定。(见spliterator()
详情。)
Spliterator
并行
Stream
。
Stream
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.