
JDK源码分析-List容器, Iterator, ListIterator
作者 |jaxer
来源 | WriteOnRead(ID:WriteOnRead)
List 是最常用的容器之一。之前提到过,分析源码时,优先分析接口的源码,因此这里先从 List 接口分析。List 方法列表如下:
由于上文「JDK源码分析-Collection」已对 Collection 接口的方法进行了简要分析,而 List 接口继承自 Collection,因此这里只分析一些 List 特有的方法:
由于这里涉及到了 ListIterator 接口,而它又继承自 Iterator 接口,因此对这两个接口也进行简要分析,同时也算为后续分析 ArrayList 等实现类做些准备工作。这两个接口的继承结构如下:
Iterator 接口是用于遍历集合元素的迭代器,它替代了 JCF 中的 Enumeration 接口。其方法概述如下:
ListIterator,列表的迭代器,继承自 Iterator,可以从列表的两端进行遍历(Iterator 只能从前到后)。它在 Iterator 基础上增加方法如下:
注意,迭代器的游标在元素之间,如下:
二者的区别与联系:
1. ListIterator 继承自 Iterator.
2. 都有 remove() 方法,都可以删除对象。
3. 都有 next() 和 hasNext() 方法,都可以实现向后遍历;而 ListIterator 有 previous() 和 hasPrevious() 方法,可以向前遍历。
4. ListIterator 有 add() 和 set() 方法,可以向 List 添加和修改元素;而 Iterator 不能。
小结:
List 作为集合(Collection),其最主要的特点就是「有序」,可以把它理解为一个数组,因此才能进行许多与位置(下标)相关的操作。
