Linkedlist的源码结构和其他没有太大区别,但细节上非常有学习的必要
一、大体结构
总体上还是围绕双向链表,以链表的操作:
1、CURD为底拓展了一系列方法,从首尾增删的remove-unlinkf/l、add-link,中间删除的remove-unlink,查询的一系列
2、边界检测用的方法:isPositionIndex等
二、方法细节笔记
方法之间低耦合,抽象出高内聚的方法,在服务性的方法中调用,边界检测放在外层方法中
public void add(int index, E element) {
checkPositionIndex(index);
if (index == size)
linkLast(element);
else
linkBefore(element, node(index));
}
实现高复用,add方法多使用私有方法,如何设计私有方法,抽象出最原本的方法
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;
}
}
提高效率,当索引在前半部分时从first开始遍历,反之从last,大大提高效率