在 Java 类库中,集合类的基本接口是 Collection 接口。这个接口有两个基本方法:
boolean add(E element);
Iterator<E> iterator();
Iterator 接口包含 4 个方法:
如果实现 Collection 接口的每一个类都要提供如此多的例行方法将是一件很烦人的
事情。为了能够让实现者更容易地实现这个接口。Java 类库提供了一个类 AbstractedCollection,
它将基础方法 size 和 iterator 抽象化了
1.链表
链表涉及到的实现类有:
LinkedList
AbstractSequentialList 内部有listIterator的内部
AbstractList
AbstractCollection
listIterator()新建一个从0开始的迭代器。多个迭代器同时修改一个List会发生并发问题。抛出Concurrent ModificationException 异常。原理:每个迭代器都维护一个独立的计数值。在每个迭代器方法的开始处检查自己改写操作的计数值是否与集合的改写操作计数值一致。如果不一致, 抛出一个 Concurrent
ModificationException 异常。
使用get(idnex);方法访问某个特定元素是一次遍历的过程。
public E get(int index) {
checkElementIndex(index);
return node(index).item;
}
Node<E> node(int index) {
// assert isElementIndex(index);
if (index < (size >> 1)) {
Node<E> x = first;
for (int i = 0; i < index; i++)
x = x.next;
return x;
} else {
Node<E> x = last;
for (int i = size - 1; i > index; i--)
x = x.prev;
return x;
}
}
2.数组
3.散列表