柿子捡软的捏,接来下几篇会逐渐分析Java集合框架中最简单也是最常用的List集合源码。
List表示有顺序或位置的集合。调用者可以精确控制元素插入到集合中的位置,一般List的实现类都容许包含重复元素。
List是一个接口,扩展了Collection接口,下面看源码(以下代码只列举出了List接口扩展的方法,继承自Collection接口的方法没有列出来)
public interface List<E> extends Collection<E> {
//插入集合c中的所有元素到指定位置
boolean addAll(int index, Collection<? extends E> c);
//修改集合指定位置处的元素
E set(int index, E element);
//添加元素到集合的指定位置
void add(int index, E element);
//删除集合中指定位置的元素
E remove(int index);
//从前往后查找对象o出现的位置
int indexOf(Object o);
//从后往前查找对象o出现的位置
int lastIndexOf(Object o);
//返回List迭代器,讲解见下面
ListIterator<E> listIterator();
ListIterator<E> listIterator(int index);
//返回子列表,左闭右开
List<E> subList(int fromIndex, int toIndex);
}
ListIterator扩展了Iterator接口,增加了一些方法,向前遍历、添加元素、修改元素、返回索引位置等。ListIterator的源码如下:
public interface ListIterator<E> extends Iterator<E> {
//继承自Iterator接口,判断是否还有元素
boolean hasNext();
//继承自Iterator接口,返回下一个元素
E next();
//判断是否有前一个元素
boolean hasPrevious();
//返回前一个元素
E previous();
//返回下一次next()函数返回元素的索引
int nextIndex();
//返回下一次previous()函数返回元素的索引
int previousIndex();
//继承自Iterator接口,删除上一次next()或者previous()返回的元素
void remove();
//修改上一次next()或者previous()返回的元素为e
void set(E e);
//在当前光标增加一个元素,不会影响next()的访问。但是previous()将返回刚刚添加的元素。
void add(E e);
}