以下内容基于jdk1.8
接口Collection分析

img
该接口实现了接口Iterable
方法:
int size();
返回元素的个数
boolean isEmpty();
返回是否为空
boolean contains(Object o);
返回是否包含某个对象
抛出异常:
- @throws ClassCastException 参数不兼容
- @throws NullPointerException 参数是null,并且容器不允许包含null元素
Object[] toArray();
返回所有元素组成的一个数组
数组是重新分配空间并创建的,它的元素不会由该容器维护,原文:
The returned array will be “safe” in that no references to it are maintained by this collection. (In other words, this method must allocate a new array even if this collection is backed by an array). The caller is thus free to modify the returned array.
T[] toArray(T[] a);
如果给定的数组大小能容纳该容器所有元素,则返回到给定数组中,否则会新分配一个可以容纳所有元素的数组并返回。
List<Integer> list = new ArrayList<Integer>();
Integer[] a = new Integer[2];
list.add(3);
list.add(5);
list.toArray(a); // a = {3,5}
抛出异常:
- @throws ArrayStoreException 给定的数组运行类型不是该容器运行类型的超类
- @throws NullPointerException 给定的数组是null
boolean add(E e);
确保该容器包含该指定的元素,如果因为这个操作改变了容器内的元素返回true
,如果该容器已经有了该元素且不允许包含重复的元素则返回false
抛出异常:
- @throws UnsupportedOperationException 该容器不支持这个操作
- @throws ClassCastException 给定的元素不能添加进容器中
- @throws NullPointerException 参数是null,并且容器不允许包含null元素
- @throws IllegalArgumentException 给定的元素的某些属性决定了它不能被添加进该容器中
- @throws IllegalStateException 由于某些限制该时间不能添加该元素
boolean remove(Object o);
移除某个元素
抛出异常:
- @throws ClassCastException
- @throws NullPointerException
- @throws UnsupportedOperationException
boolean containsAll(Collection> c)
如果该容器包含给定的容器中的所有元素,返回`true`
抛出异常:
- @throws ClassCastException
- @throws NullPointerException
## boolean addAll(Collection extends E> c)
将给定容器中的所有元素插入到该容器中
抛出异常:
- @throws UnsupportedOperationException
- @throws ClassCastException
- @throws NullPointerException
- @throws IllegalArgumentException
- @throws IllegalStateException
## boolean removeAll(Collection> c)
抛出异常:
- @throws NullPointerException
抛出异常:
- @throws ClassCastException
- @throws NullPointerException
- @throws IllegalArgumentException
- @throws IllegalStateException
将该容器和给定容器中共有的元素从该容器中删除
抛出异常:
- @throws UnsupportedOperationException
- @throws ClassCastException
- @throws NullPointerException
default boolean removeIf(Predicate super E> filter)
`Predicate`是JAVA8新增的一个函数式接口(指如果填写lambda表达式则默认实现Predicate的test方法),这个方法删除所有符合条件的元素,如果成功返回`true`
**? super E指的是E或E的父类**
默认实现:
```java
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;
}
```
调用实例:
```java
Integer[] nums = {1,2,3,4,5,6};
ArrayList<Integer> list = new ArrayList<Integer>(Arrays.asList(nums));
list.removeIf(num->num>3?true:false);//删除list中大于3的元素
//这里的lambda表达式是简化的写法,将lambda表达式完整的写法是list.removeIf((Integer num)->{return num>3?true:false;});
```
抛出异常:
- @throws NullPointerException
- @throws UnsupportedOperationException 这个元素不能被删除
## boolean retainAll(Collection> c);
**? super E指的是E或E的父类**
默认实现:
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;
}
```
Integer[] nums = {1,2,3,4,5,6};
ArrayList<Integer> list = new ArrayList<Integer>(Arrays.asList(nums));
list.removeIf(num->num>3?true:false);//删除list中大于3的元素
//这里的lambda表达式是简化的写法,将lambda表达式完整的写法是list.removeIf((Integer num)->{return num>3?true:false;});
```
- @throws UnsupportedOperationException 这个元素不能被删除
仅保留给定集合中的元素,删除其他元素。
抛出异常:
- @throws UnsupportedOperationException
- @throws ClassCastException
- @throws NullPointerException
void clear();
移除所有元素。
抛出异常:
- @throws UnsupportedOperationException
default Stream stream();
返回一个序列流。
默认实现:
default Stream<E> stream() {
return StreamSupport.stream(spliterator(), false);
}
default Stream parallelStream();
返回一个并行流。
默认实现:
default Stream<E> parallelStream() {
return StreamSupport.stream(spliterator(), true);
}
原创文章,作者:彭晨涛,如若转载,请注明出处:https://www.codetool.top/article/collection%e6%8e%a5%e5%8f%a3%e7%a0%94%e7%a9%b6/