AbstractCollection
此类提供 Collection 接口的骨干实现,以最大限度地减少了实现此接口所需的工作。 还有两个抽象方法,具体的迭代器,具体的Collection 的大小
public abstract Iterator<E> iterator();
public abstract int size();
//这里add 是实现方法,而不是已抽象方法的方式呢
/*
To implement an unmodifiable collection, the programmer needs only to*
extend this class and provide implementations
for the iterator and size methods
To implement a modifiable collection, the programmer must additionally override this class's add method
为了实现一个不可修改的集合,程序员只需要扩展这个类并提供iterator和size方法的实现。 ( iterator方法返回的迭代器必须实现hasNext和next )
要实现可修改的集合,程序员必须另外覆盖此类的add方法(否则将抛出UnsupportedOperationException ),并且由iterator方法返回的迭代器必须另外实现其remove方法。
*/
public boolean add(E e) {
throw new UnsupportedOperationException();
}
List
有序的 collection(也称为序列)。定义了一些针对List的方法
boolean addAll(int var1, Collection<? extends E> var2);
E get(int var1);
E set(int var1, E var2);
void add(int var1, E var2);
E remove(int var1);
int indexOf(Object var1);
int lastIndexOf(Object var1);
ListIterator<E> listIterator();
ListIterator<E> listIterator(int var1);
List<E> subList(int var1, int var2)
AbstractList
此类提供List
接口的骨干实现,以最大限度地减少实现“随机访问”数据存储(如数组)支持的该接口所需的工作。和AbstractCollection实现了Collection的骨干实现一样
//list结构被修改的次数 protected transient int modCount = 0;
AbstractSequentialList 是 LinkedList的父接口
此类提供的骨干实现List界面最小化以实现此接口由“连续访问”数据存储备份所需的工作(如链接列表)。对于随机访问数据(如数组), AbstractList应优先于此类。
实现的add 方法
public void add(int index, E element) { try {
// 使用 ListIterator 的 add方法
listIterator(index).add(element);
} catch (NoSuchElementException exc)
{
throw new IndexOutOfBoundsException("Index: "+index);
}
}