JDK8源码阅读笔记
切换暗/亮/自动模式 切换暗/亮/自动模式 切换暗/亮/自动模式 返回首页

AbstractSequentialList



此类提供List接口的基本实现,以减少实现支持“顺序访问”数据存储(例如链表)的该接口所需的工作。对于随机访问数据(例如数组),应优先使用AbstractList类。

该类与AbstractList类相反,因为它在列表的列表迭代器的顶部实现了“随机访问”方法(get(int index)set(int index, E element)add(int index, E element)remove(int index)),而不是相反。

要实现一个列表,编程者仅需要扩展此类并为listIteratorsize方法提供实现。对于不可修改的列表,编程者只需要实现列表迭代器的hasNextnexthasPreviouspreviousindex方法。

对于可修改的列表,编程者应该另外实现列表迭代器的set方法。对于可变大小的列表,程序员应该另外实现列表迭代器的removeadd方法。

根据Collection接口规范中的建议,编程者通常应提供一个void(无参数)和参数为Collection的构造函数。

该接口是Java集合框架的成员接口。


1. protected AbstractSequentialList()

唯一的构造函数。 (用于子类构造函数的调用,通常是隐式的。)


2. public E get(int index)

返回此列表中指定位置的元素。

此实现首先获取一个指向索引元素的列表迭代器(使用listIterator(index))。然后,它使用ListIterator.next获取元素并返回它。


3. public E set(int index, E element)

用指定的元素替换此列表中指定位置的元素(可选操作)。

此实现首先获取一个指向索引元素的列表迭代器(使用listIterator(index))。然后,它使用ListIterator.next获取当前元素,并将其使用ListIterator.set替换。

请注意,如果列表迭代器未实现set操作,则此实现将抛出UnsupportedOperationException


4. public void add(int index, E element)

将指定的元素插入此列表中的指定位置(可选操作)。将当前在该位置的元素(如果有)和任何后续元素右移(将其索引加一)。

此实现首先获取一个指向指定索引元素的列表迭代器(使用listIterator(index))。然后,它使用ListIterator.add 插入指定的元素。

请注意,如果列表迭代器未实现add操作,则此实现将抛出UnsupportedOperationException


5. public E remove(int index)

删除此列表中指定位置的元素(可选操作)。将所有后续元素向左移动(将其索引减一)。返回从列表中删除的元素。

此实现首先获取一个指向指定索引元素的列表迭代器(使用listIterator(index))。然后,它使用ListIterator.remove删除该元素。

请注意,如果列表迭代器未实现remove操作,则此实现将抛出UnsupportedOperationException


6. public boolean addAll(int index, Collection<? extends E> c)

将指定集合中的所有元素插入此列表中的指定位置(可选操作)。将当前在该位置的元素(如果有)和任何后续元素右移(增加其索引)。新元素将按照指定集合的迭代器返回的顺序显示在此列表中。如果在操作进行过程中修改了指定的集合,则此操作的行为是不确定的。 (请注意,如果指定的集合是此列表,并且是非空的,则将发生这种情况。)

此实现在指定集合上获得一个迭代器,并在此列表上获得一个指向指定索引元素的列表迭代器(使用listIterator(index))。然后,遍历指定的集合,使用ListIterator.next(跳过已插入的元素)之后接着使用ListIterator.add,将从迭代器获得的元素一次插入到此列表中。

请注意,如果listIterator方法返回的列表迭代器未实现add操作,则此实现将引发UnsupportedOperationException


7. public Iterator<E> iterator()

返回此列表中元素的迭代器(按适当顺序)。

此实现仅返回列表上的列表迭代器。


8. public abstract ListIterator<E> listIterator(int index);

返回此列表中的元素的列表迭代器(按适当顺序)。