关键源码(jdk1.7和jdk1.8相同)
public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, java.io.Serializable
{
// 有效个数
transient int size = 0;
// 头结点
transient Node<E> first;
// 尾节点
transient Node<E> last;
// 默认构造器
public LinkedList() {
}
// add方法,插入到链表的尾部
public boolean add(E e) {
linkLast(e);
return true;
}
// get方法
public E get(int index) {
checkElementIndex(index);
return node(index).item;
}
// 查找下标index所在的元素,分两边找:小于一半的从头部开始找;大于一半的从尾部开始找。
Node<E> node(int 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;
}
}