Collection
Collection接口提供了一组操作成批对象的方法
它提供了基本操作如添加、删除。它也支持查询操作如是否为空isEmpty()方法等。
为了支持对Collection进行独立操作,Java的集合框架给出了一个Iterator,它使得你可以泛型操作一个Collection,而不需知道这个Collection的具体实现类型是什么。它的功能与Java1中的Enumeration类似,只是更易掌握和使用,功能也更强大。在建立集合框架时,Sun的开发团队考虑到需要提供一些灵活的接口,用来操作成批的元素,又为了设计的简便,就把那些对集合进行可选操作的方法与基本方法放到了一起。因为一个接口的实现者必须提供对接口中定义的所有方法的实现,这就需要一种途径让调用者知道它正在调用的可选方法当前不支持。
最后开发团队选择使用一种信号,也即抛出一种不支持操作例外(UnsupportedOperationException),如果你在使用一个Collection中遇到一个上述的例外,那就意味着你的操作失败,比如你对一个只读Collection添加一个元素时,你就会得到一个不支持操作例外。在你实现一个集合接口时,你可以很容易的在你不想让用户使用的方法中抛出UnsupportOperationException来告诉使用者这个方法当前没有实现,UnsupportOperationException是RuntimeException的一个扩展。
深入解析Collection代码
Collection接口中,有以下几个方法
int size()
返回此集合中元素的个数。 如果该集合包含超过Integer.MAX_VALUE元素,则返回Integer.MAX_VALUE 。
返回:
元素在此集合数
boolean isEmpty()
判断集合是否为空集
返回:
true如果此collect ion不包含元素
boolean contains(Object o)
返回true如果此collection包含指定的元素。 更正式地说,返回true当且仅当这个集合包含至少一个元素e这样Objects.equals(o, e)
参数:
-O - 存在的元素此集合中的要测试
返回:
true如果此collection包含指定的元素
抛出:
ClassCastException -如果指定元素的类型是不兼容的与此集合
NullPointerException -如果指定的元素为null,并且此collection不允许null元素
Iterator<E> iterator()
返回此集合中元素上的迭代器。 没有有关元素返回顺序的保证
(除非此集合是提供保证的)
返回:
一个含有这个集合中的元素的Iterator迭代器
Object[] toArray()
此方法必须分配即使此集合的数组,一个新的数组。 因此,调用者可以自由地修改返回的数组。
返回:
阵列,其运行时组件类型是Object ,包含该集合中的所有元素的
<T> T[] toArray(@NotNull T[] a)
返回包含此集合中所有元素的数组;
返回数组的运行时类型是指定数组的运行时类型。
如果集合适合指定的数组,则返回其中。
否则,将分配一个新数组,该数组的运行时类型为
指定的数组和此集合的大小。
参数:
a - 在其中此集合中的元素将被存储,如果它是足够大的阵列; 否则,相同的运行时类型的新的数组被分配用于这个数组。
类型参数:
- 组件类型的数组以包含收集
返回:
包含此集合中的所有元素的数组
抛出:
ArrayStoreException -如果此集合中的任何元素的运行时类型不是可分配给运行时组件类型指定数组的
NullPointerException -如果指定的数组为null
<T> T[] toArray(@NotNull IntFunction<T[]> generator)
参数:
generator - 它产生所希望的类型的新阵列和设置长度的函数
类型参数:
- 组件类型的数组以包含收集
返回:
包含此集合中的所有元素的数组
抛出:
ArrayStoreException -类型错误
NullPointerException -传入null抛出
boolean add(E e)
返回ture表示集合发生改变
否则抛出异常
参数:
e - 要添加的元素
返回:
true 如果此集合改变调用的结果
抛出:
UnsupportedOperationException - 如果add操作不受此集合支持
ClassCastException - 要添加的类型错误
NullPointerException - 如果指定的元素为null,并且此collection不允许null元素
IllegalArgumentException - 如果元素防止它的某些属性添加到此集合
IllegalStateException - 由于插入限制
boolean remove(Object o)
从该集合中移除指定元素的单个实例,如果存在的话(可选操作)。
要删除的元素e使得 Objects.equals(o, e)
如果该集合包含一个或多个这样的元素。
参数:
o - 要由该集合中移除的元素,如果存在的话
返回:
true 删除成功
抛出:
ClassCastException -如果指定元素的类型是不兼容的与此集合
NullPointerException -如果指定的元素为null,并且此collection不允许null元素
UnsupportedOperationException -如果remove操作不会被这个集合支持
boolean containsAll(@NotNull Collection<?> c)
返回true ,如果此collection包含指定集合中的元素。
参数:
c - 收集到这个集合中检查是否包含
返回:
true - 如果此collection包含指定集合中的元素
抛出:
ClassCastException -如果类型指定的集合中的一个或多个元素的不相容与此集合
NullPointerException -如果指定集合包含一个或多个null元素,并且此collection不允许null元素,或者指定的集合为null。
boolean addAll(@NotNull Collection<? extends E> c)
添加所有指定集合中的元素到这个集合
参数:
c - 要添加到该集合的元素的collection
返回:
true - 添加成功
抛出:
UnsupportedOperationException -如果addAll操作不受此集合支持
ClassCastException -如果类指定集合防止它的元素的被添加到该集合
NullPointerException -如果指定collection包含一个null元素,并且此collection不允许null元素,或者指定的collection为null
IllegalArgumentException -如果被添加到该集合指定集合防止它的元素的某些属性
IllegalStateException - 由于插入限制
boolean removeAll(@NotNull Collection<?> c)
移除所有包含在指定collection中在这个集合的元素。 此调用返回后,该集合将包含在没有相同的元素与指定的集合。
参数:
C - 从该集合除去含有的元素集合
返回:
true - 删除成功返回
抛出:
UnsupportedOperationException -如果removeAll方法不受此集合支持
ClassCastException -如果类型此集合中的一个或多个元件均与指定collection不兼容
NullPointerException -如果此集合包含一个或多个null元素,并且指定collection不支持null元素,或者指定collection为null
boolean removeIf(@NotNull Predicate<? super E> filter)
迭代期间或由谓词引发的错误或运行时异常将中继到调用方。
删除此集合中满足给定谓词的所有元素。
参数:
filter-它返回一个谓词true用于待删除的元素
返回:
true如果任何元素被拆除
抛出:
NullPointerException -如果指定过滤器为null
UnsupportedOperationException -如果要素不能从这个集合中删除。 如果一个匹配元件不能被删除的实现可能抛出此异常,或者如果,在一般情况中,不支持删除。
实现代码:
default boolean removeIf(Predicate<? super E> filter) {
Objects.requireNonNull(filter);
boolean removed = false;
final Iterator<E> each = iterator();
while (each.hasNext()) {
if (filter.test(each.next())) {
each.remove();
removed = true;
}
}
return removed;
}
boolean retainAll(@NotNull Collection<?> c)
仅保留此集合中那些包含在指定集合中的元素
参数:
c - 被保留在此集合中的元素的collection
返回:
true如果此集合改变调用的结果
抛出:
UnsupportedOperationException -如果retainAll操作不受此集合支持
ClassCastException -如果类型此集合中的一个或多个元件均与指定collection不兼容
NullPointerException -如果此集合包含一个或多个null元素,并且指定collection不允许null元素,或者指定集合为null
void clear()
移除此collection中的元素。
抛出:
UnsupportedOperationException -如果clear操作不会被这个集合支持
boolean equals(Object o)
指定的对象与此集合是否相等。
参数:
o - 对象为与此集合相等性比较
返回:
true如果指定的对象等于此集合
int hashCode()
返回此集合的哈希码值。
返回:
此集合的哈希码值
下面几种方法是重写的Iterable中的方法
Stream<E> stream()
返回一个连续Stream与此集合作为其源。
这种方法应该是覆盖的情况下spliterator()方法不能返回spliterator是IMMUTABLE , CONCURRENT ,或后期绑定 。 (见spliterator()了解详细信息。)
返回:
顺序Stream过该集合中的元素
实现代码:
default Stream<E> stream() {
return StreamSupport.stream(spliterator(), false);
}
Stream<E> parallelStream()
返回一个可能的平行Stream与此集合作为其源。 这是允许的这个方法返回一个连续的数据流。
这种方法应该是覆盖的情况下spliterator()方法不能返回spliterator是IMMUTABLE , CONCURRENT ,或后期绑定 。 (见spliterator()了解详细信息。)
返回:
一个可能的平行Stream过该集合中的元素
实现代码:
default Stream<E> parallelStream() {
return StreamSupport.stream(spliterator(), true);
}
Spliterator<E> spliterator()
创建Spliterator在这个集合中的元素。 实现应记录由spliterator报道的特征值。 不需要这样的特征值,如果spliterator报告上报Spliterator.SIZED与此collection不包含元素。
默认的实现应该由能返回更有效的spliterator子类覆盖。 为了保持在预期的懒惰行为stream()和parallelStream()方法,spliterators要么具有的特性IMMUTABLE或CONCURRENT ,或者是后期绑定 。
如果这些方法都不实用,覆盖类应该描述spliterator的结合和结构性干涉书面规章制度,并应覆盖stream()和parallelStream()方法来创建使用流Supplier的spliterator的,如:
Stream<E> s = StreamSupport.stream(() -> spliterator(), spliteratorCharacteristics)
这些要求保证通过产生的流stream()和parallelStream()方法将反映集合的内容作为终端流操作开始的。
返回:
一个Spliterator在这个集合中的元素
实现代码:
@Override
default Spliterator<E> spliterator() {
return Spliterators.spliterator(this, 0);
}