概述(略)
关于集合的概述很多资料都可以找到,这里就不再列出,仅列出一些相对需要时刻复习的东西。
奠定集合基础的接口
接 口 | 描 述 |
---|---|
Collection | 允许操作一组对象,位于集合层次的顶部 |
Deque | 扩展Queue以实现双端队列 |
List | 扩展Collection以处理序列(对象列表) |
NavigableSet | 扩展SortedSet以基于最接近匹配原则检索元素 |
Queue | 扩展Collection以处理特殊类型的列表,这种类型的列表只能从列表顶部删除元素 |
Set | 扩展Collection以处理集合,集合中的元素必须唯一 |
SortedSet | 扩展Set以处理已排序的集合 |
接口分析之Collection
Collection接口是构建集合框架的基础,因为定义集合的所有类都必须实现该接口。
声明:
interface Collection
其中E指定集合存储的对象的类型。Collection扩展了Iterable接口,所以for-each风格可以遍历所有集合。
声明的方法:
方法 | 描述 |
---|---|
boolean add(E obj) | 将obj添加到调用集合中。如果obj被添加到调用集合中,就返回true,如果obj已经是集合成员并且集合元素不允许重复,就返回false |
boolean addAll(Collection<? extends E> c) | 将c中的所有元素添加到调用集合中。如果调用集合发生了变化(例如添加了元素),就返回true,否则返回false |
void clear() | 移除调用集合中的所有元素 |
boolean contains(Objects obj) | 如果obj是调用集合中的元素,就返回true,否则返回false |
boolean containsAll(Collection<?> c) | 如果调用集合包含c的所有元素,就返回true,否则返回false |
boolean equals(Object obj) | 如果调用集合与obj相等,就返回true,否则返回false |
int hashCode() | 返回调用集合的散列码 |
boolean isEmpty() | 如果调用集合为空,就返回true,否则返回false |
Iterator<E> iterator() | 返回调用集合的一个迭代器 |
default Stream<E> parrallelStream() | 返回一个使用调用集合作为元素来源的流,这个流支持并行操作(jdk 8 新增) |
boolean remove(Object obj) | 从调用集合移除obj的一个实例,如果移除了元素返回true,否则false |
boolean removeAll(Collection<?> c) | 从调用集合中移除c的所有元素,如果发生了变化(移除了元素),则返回true,否则false |
default boolean removeIf(Predicate<? super E> predicate) | 从调用集合中移除满足predicate指定条件的那些元素(jdk 8 新增) |
boolean retainAll(Collection<?> c) | 移除调用集合中除c中元素之外的所有元素,如果集合发生变化(移除了元素),则返回true,否则false |
int size() | 返回数量 |
default Spliterator<E> spliterator() | 返回调用集合的Spliterator**(jdk 8 新增)** |
default Stream<E> stream() | 返回一个使用调用集合作为元素来源的流。该流是顺序流(jdk 8 新增) |
Object[] toArray() | 返回包含调用集合中所有元素的数组,数组元素是集合元素的副本 |
<T> T[] toArray(T array[]) | 返回包含调用集合中元素的数组。数组元素是集合元素的副本。 ①如果array的长度等于元素的数量,就保存在array中 ②如果array的长度小于元素数量,就分配必须大小的新数组并且返回这个数组 ③如果array的长度大于元素的数量,就将最后一个元素数组之后的数组元素设置为null ④如果所有集合元素的类型都不是array的子类型,那么抛出ArrayStoreException异常 |
异常
- 如果集合不能被修改,可能出现UnsupportedOperationException异常
- 如果一个对象和另一个对象不兼容,可能出现ClassCastException,例如将一个不兼容的对象添加到集合中的时候就会出现
- 如果试图在不允许存储null的对象中存储null对象,那么会出现NullPointerException异常
- 如果使用参数无效,会抛出IllegalArgumentException异常
- 如果试图为长度固定并且已经满了的集合添加元素,那么会抛出IllegalStateException异常
注意
- add()方法要求的参数类型为E,切必须和集合期望的对象兼容
- toArray()的第二种形式更加方便,因为返回的类型是指定为参数的类型,第一种是返回Object类型的数组。
- equals()的相等性根据不同的集合有不同的含义。
- 新增的removeIf()方法可以用来移除满足特定条件的元素,Predicate是jdk8新增的的一个函数式接口
- iterator()返回集合的一个迭代器,**新增的**spliterator()方法返回集合的一个spliterator,都是操作集合时会频繁用到的迭代器。