目录
首先看一下Collection接口:分为List和Set接口,其中List和Set也分别有各自的实现类(抽象类),而且Collection也有一个抽象类,它实现了Collection接口中的绝大多数方法,避免了编码的重复。
Collection接口中有一个iterator方法,用来返回一个Iterator接口,我们使用Iterator迭代器来遍历集合,ListIterator是List接口所特有的,在List接口中用于返回一个ListIterator对象。
Collection接口:
public interface Collection<E> extends Iterable<E>
注意:所有实现Collection的子类都必须有两个构造方法,一个是无参构造,一个是参数为Collection的构造,可以用来转换Collection的类型。
List接口
public interface List<E> extends Collection<E>
List是一个实现了Collection的接口,是一个有序的集合,在API实现上,有处理Collection接口的其他实现。其中第一个元素的索引值是0,与Set集合不同的是List可以存储重复元素。
Set接口
public interface Set<E> extends Collection<E>
同理,Set接口也是一个实现了Collection的接口,不过他是无序的,不允许存储重复元素。它的API与Collection接口是相同的。
AbstractCollection抽象类
public abstract class AbstractCollection<E> implements Collection<E>
public abstract Iterator<E> iterator();
public abstract int size();
该抽象类实现了除iterator和size的方法,作用是方便其他类实现Collection,比如ArrayList,LinkedList,这些类想要实现Collection接口,通过继承AbstractList就已经实现了大部分的方法了。
AbstractList抽象类
public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E>
AbstractList是一个继承抽象类AbstractCollection并实现List接口的抽象类。它实现了除size和get之外的函数,并且他实现了List接口中的绝大多数方法,方便其他类实现List接口。
另外,和AbstractCollection相比,AbstractList抽象类中,实现了iterator()接口。
AbstractSet抽象类
public abstract class AbstractSet<E> extends AbstractCollection<E> implements Set<E>
AbstractSet是一个继承了抽象类AbstractCollection并实现了Set接口的抽象类。由于Set接口的API与Collection接口的API一样,所以它实现了Set接口中的绝大部分方法,方便其他类继承List接口
Iterator接口
public interface Iterator<E>
Iterator是集合的迭代器,用于遍历集合中的元素。Iterator接口提供的API包括:
boolean hasNext();
E next();
default void remove();
default void remove();
注意:当Iterator遍历Collection集合的时候,会有一个fail-fast机制,即当某一个线程A通过Iterator去遍历某一个集合的内容的时候,如果集合中的内容被其他线程改变了,那么线程A访问集合的时候就会发生ConcurrentModificationException异常,产生fail-fast事件。
ListIterator接口
public interface ListIterator<E> extends Iterator<E>
ListIterator是一个继承于Iterator接口的接口,是一个队列迭代器,专门用于遍历List,可以用于向前或者向后遍历,相比于Iterator接口,它新增了以下几种方法:
abstract void add(E object)
abstract boolean hasPrevious()
abstract int nextIndex()
abstract E previous()
abstract int previousIndex()
abstract void set(E object)