【Java】 集合系列02( Collection)

一、概要

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) 
如果此集合包含指定的元素,则返回 trueboolean containsAll(Collection<?> c) 
如果此集合包含指定集合中的所有元素,则返回trueboolean equals(Object o) 
将指定的对象与此集合进行比较以获得相等性。  

int hashCode() 
返回此集合的哈希码值。  

boolean isEmpty() 
如果此集合不包含元素,则返回 trueIterator<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() 
返回以此集合作为源的顺序 StreamObject[] 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) 
如果此列表包含指定的元素,则返回 trueboolean containsAll(Collection<?> c) 
如果此列表包含指定集合的所有元素,则返回trueboolean equals(Object o) 
将指定的对象与此列表进行比较以获得相等性。 

E get(int index) 
返回此列表中指定位置的元素。 

int hashCode() 
返回此列表的哈希码值。  

int indexOf(Object o) 
返回此列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1。 

boolean isEmpty() 
如果此列表不包含元素,则返回 trueIterator<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() 
在此列表中的元素上创建一个SpliteratorList<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) 
如果此集合包含指定的元素,则返回 trueboolean containsAll(Collection<?> c) 
返回 true如果此集合包含所有指定集合的元素。 

boolean equals(Object o) 
将指定的对象与此集合进行比较以实现相等。  

int hashCode() 
返回此集合的哈希码值。  

boolean isEmpty() 
如果此集合不包含元素,则返回 trueIterator<E> iterator() 
返回此集合中元素的迭代器。  

boolean remove(Object o) 
如果存在,则从该集合中删除指定的元素(可选操作)。  

boolean removeAll(Collection<?> c) 
从此集合中删除指定集合中包含的所有元素(可选操作)。 

boolean retainAll(Collection<?> c) 
仅保留该集合中包含在指定集合中的元素(可选操作)。 

int size() 
返回此集合中的元素数(其基数)。  

default Spliterator<E> spliterator() 
在此集合中的元素上创建一个 SpliteratorObject[] 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() 
如果迭代具有更多元素,则返回 trueE 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()返回的最后一个元素(可选操作)。  

猜你喜欢

转载自blog.csdn.net/ooo123lll/article/details/80999547