一、概要
Collection的框架类的关系图如下:
Collection是一个接口,主要有两个分支:List 和 Set
List和Set也都是接口,继承于Collection。
List是有序的队列,List中可以有重复的元素。
Set是集合,Set中没有重复的元素。
1.Collection接口简介
Collection的定义如下:
public interface Collection<E>extends Iterable<E>
(1)Collection是一个接口,也是一个高度抽象出来的集合,它包含了集合的基本操作:
添加、删除、清空、遍历、是否为空、获取大小、是否保护某元素等等。
(2)Collection接口的所有子类(直接子类和间接子类)都必须实现2种构造函数:
不带参数的构造函数 和 参数为Collection的构造函数。带参数的构造函数,可以用来转换Collection的类型。
Collection的API(JDK1.8)
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)
返回包含此集合中所有元素的数组; 返回的数组的运行时类型是指定数组的运行时类型。
2.List接口简介
List的定义如下:
public interface List<E> extends Collection<E>
List是一个继承于Collection的接口,即List是集合中的一种。List是有序的队列,List中的每一个元素都有一个索引;第一个元素的索引值是0,往后的元素的索引值依次+1。和Set不同,List中允许有重复的元素。
有序集合(也称为序列 )。该界面的用户可以精确控制列表中每个元素的插入位置。 用户可以通过整数索引(列表中的位置)访问元素,并搜索列表中的元素。
List的API(jdk1.8)
Modifier and Type Method and Description
boolean add(E e)
将指定的元素追加到此列表的末尾(可选操作)。
void add(int index, E element)
将指定的元素插入此列表中的指定位置(可选操作)。
boolean addAll(Collection<? extends E> c)
按指定集合的迭代器(可选操作)返回的顺序将指定集合中的所有元素附加到此列表的末尾。
boolean addAll(int index, Collection<? extends E> c)
将指定集合中的所有元素插入到此列表中的指定位置(可选操作)。
void clear()
从此列表中删除所有元素(可选操作)。
boolean contains(Object o)
如果此列表包含指定的元素,则返回 true 。
boolean containsAll(Collection<?> c)
如果此列表包含指定集合的所有元素,则返回true。
boolean equals(Object o)
将指定的对象与此列表进行比较以获得相等性。
E get(int index)
返回此列表中指定位置的元素。
int hashCode()
返回此列表的哈希码值。
int indexOf(Object o)
返回此列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1。
boolean isEmpty()
如果此列表不包含元素,则返回 true 。
Iterator<E> iterator()
以正确的顺序返回该列表中的元素的迭代器。
int lastIndexOf(Object o)
返回此列表中指定元素的最后一次出现的索引,如果此列表不包含元素,则返回-1。
ListIterator<E> listIterator()
返回列表中的列表迭代器(按适当的顺序)。
ListIterator<E> listIterator(int index)
从列表中的指定位置开始,返回列表中的元素(按正确顺序)的列表迭代器。
E remove(int index)
删除该列表中指定位置的元素(可选操作)。
boolean remove(Object o)
从列表中删除指定元素的第一个出现(如果存在)(可选操作)。
boolean removeAll(Collection<?> c)
从此列表中删除包含在指定集合中的所有元素(可选操作)。
default void replaceAll(UnaryOperator<E> operator)
将该列表的每个元素替换为将该运算符应用于该元素的结果。
boolean retainAll(Collection<?> c)
仅保留此列表中包含在指定集合中的元素(可选操作)。
E set(int index, E element)
用指定的元素(可选操作)替换此列表中指定位置的元素。
int size()
返回此列表中的元素数。
default void sort(Comparator<? super E> c)
使用随附的 Comparator排序此列表来比较元素。
default Spliterator<E> spliterator()
在此列表中的元素上创建一个Spliterator 。
List<E> subList(int fromIndex, int toIndex)
返回此列表中指定的 fromIndex (含)和 toIndex之间的视图。
Object[] toArray()
以正确的顺序(从第一个到最后一个元素)返回一个包含此列表中所有元素的数组。
<T> T[] toArray(T[] a)
以正确的顺序返回一个包含此列表中所有元素的数组(从第一个到最后一个元素);
返回的数组的运行时类型是指定数组的运行时类型。
3.Set简介
Set定义如下:
public interface Set<E> extends Collection<E>
Set是一个继承于Collection的接口,即Set也是集合中的一种。Set是没有重复元素的集合。
关于API方面。Set的API和Collection完全一样(JDK1.8)。
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()
返回此集合中元素的迭代器。
boolean remove(Object o)
如果存在,则从该集合中删除指定的元素(可选操作)。
boolean removeAll(Collection<?> c)
从此集合中删除指定集合中包含的所有元素(可选操作)。
boolean retainAll(Collection<?> c)
仅保留该集合中包含在指定集合中的元素(可选操作)。
int size()
返回此集合中的元素数(其基数)。
default Spliterator<E> spliterator()
在此集合中的元素上创建一个 Spliterator 。
Object[] toArray()
返回一个包含此集合中所有元素的数组。
<T> T[] toArray(T[] a)
返回一个包含此集合中所有元素的数组; 返回的数组的运行时类型是指定数组的运行时类型。
4、AbstractCollection
AbstractCollection的定义如下:
public abstract class AbstractCollection<E> extends Object implements Collection<E>
AbstractCollection是一个抽象类,它实现了Collection中除iterator()和size()之外的函数。
AbstractCollection的主要作用:
它实现了Collection接口中的大部分函数。从而方便其它类实现Collection,比如ArrayList、LinkedList等,它们这些类想要实现Collection接口,通过继承AbstractCollection就已经实现了大部分的接口了。
5、AbstractList
AbstractList的定义如下:
public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E>
AbstractList是一个继承于AbstractCollection,并且实现List接口的抽象类。它实现了List中除size()、get(int location)之外的函数。
AbstractList的主要作用:
它实现了List接口中的大部分函数。从而方便其它类继承List。另外,和AbstractCollection相比,AbstractList抽象类中,实现了iterator()接口。
6、AbstractSet
AbstractSet的定义如下:
public abstract class AbstractSet<E> extends AbstractCollection<E> implements Set<E>
AbstractSet是一个继承于AbstractCollection,并且实现Set接口的抽象类。由于Set接口和Collection接口中的API完全一样,Set也就没有自己单独的API。和AbstractCollection一样,它实现了List中除iterator()和size()之外的函数。
AbstractSet的主要作用:
它实现了Set接口中的大部分函数。从而方便其它类实现Set接口。
7、Iterator
Iterator的定义如下:
public interface Iterator<E>
一个集合的迭代器。 Iterator需要的地方Enumeration在Java集合框架。 迭代器有两种不同的枚举方式:
迭代器允许调用者在迭代期间从底层集合中删除元素,并具有明确定义的语义。
方法名称得到改进。
集合可以通过Iterator去遍历集合中的元素。Iterator提供的API接口,包括:是否存在下一个元素、获取下一个元素、删除当前元素。
注意:Iterator遍历Collection时,是fail-fast机制的。即,当某一个线程A通过iterator去遍历某集合的过程中,若该集合的内容被其他线程所改变了;那么线程A访问集合时,就会抛出ConcurrentModificationException异常,产生fail-fast事件。关于fail-fast的详细内容,我们会在后面专门进行说明。
API(JDK1.8)如下:
Modifier and Type Method and Description
default void forEachRemaining(Consumer<? super E> action)
对每个剩余元素执行给定的操作,直到所有元素都被处理或动作引发异常。
boolean hasNext()
如果迭代具有更多元素,则返回 true 。
E next()
返回迭代中的下一个元素。
default void remove()
从底层集合中删除此迭代器返回的最后一个元素(可选操作)。
8、ListIterator
定义如下:
public interface ListIterator<E> extends Iterator<E>
ListIterator是一个继承于Iterator的接口,它是队列迭代器。专门用于遍历List,能提供向前/向后遍历。相比于Iterator,它新增了添加、是否存在上一个元素、获取上一个元素等等API接口。
Modifier and Type Method and Description
void add(E e)
将指定的元素插入列表(可选操作)。
boolean hasNext()
返回 true如果遍历正向列表,列表迭代器有多个元素。
boolean hasPrevious()
返回 true如果遍历反向列表,列表迭代器有多个元素。
E next()
返回列表中的下一个元素,并且前进光标位置。
int nextIndex()
返回随后调用 next()返回的元素的索引。
E previous()
返回列表中的上一个元素,并向后移动光标位置。
int previousIndex()
返回由后续调用 previous()返回的元素的索引。
void remove()
从列表中删除由 next()或 previous()返回的最后一个元素(可选操作)。
void set(E e)
用 指定的元素替换由 next()或 previous()返回的最后一个元素(可选操作)。