如今轮到 AbstractSequentialList 啦,Sequential 其实就是序列的意思吧,其实继承这个抽象类就只有 LinkedList 啦。这个抽象类实现的方法为后续 LinkedList 这种数据存储模式定了一个骨架,好比随机访问 (get(int index), set(int index, E element), add(int index, E element)。java
顺便提一下, java 9 是有模块这个概念的,能够看到 Package 上面的模块概念微信
为了实现链表结构的List,开发者须要继承这个类和实现 listIterator 和 size 方法,对于不能修改的List,开发者仅须要实现 iterator 的 hasNext, next, hasPrevious, previous 和 index方法。函数
能够先看看这个类的方法的概览,再一层层剥开这个洋葱。3d
根据集合接口规范中的建议提供一个空(无参数)构造函数。blog
在 get 方法里面主要就是实现了 listIterator 方法看着这个方法,若是出现异常状况,就只会抛出 IndexOutOfBoundsException 越界的异常,这样合适吗?继承
而后在改抽象类中 ListIterator 仍是个抽象方法,须要实现类根据需求实现吧。接口
看看 set 方法,从迭代器中取这个值后处理,而后成功返回的是老的值。其中 add 和 remove 方法都是相似的实现。element
其中 addAll 方法就是用了 for 循环一个个加了。开发
这个类的方法并非不少!这里看着比较奇怪的逻辑是 AbstractSequentialList 继承了AbstractList ,其实在 AbstractList 中实现了 ListIterator<E> listIterator(final int index) ,可是在 AbstractSequentialList 又变成了 public abstract ListIterator<E> listIterator 抽象方法,这样看着为何不在AbstractList 层分红两个抽象类呢?rem
后面继续日后看吧!
有什么讨论的内容,能够加我微信公众号: