LinkedList
LinkedList<String> ll = new LinkedList<>();
ll.add("张三");
String s = ll.get(0);
System.out.println(s);
transient int size = 0;
transient Node<E> first;//头结点
transient Node<E> last;//尾结点
public LinkedList() {
}
public boolean add(E e) {
linkLast(e);//尾插
return true;
}
void linkLast(E e) {
final Node<E> l = last;//第一次插入时候last 为 null
final Node<E> newNode = new Node<>(l, e, null);//头节点, 参数,尾结点指向null
last = newNode;//将尾结点指向新建的节点
if (l == null)//第一次last 为空 所以将新节点设置为头结点
first = newNode;
else
l.next = newNode;//否则尾结点的下一个指针指向新节点 完成尾插
size++;
modCount++;
}
public E get(int index) {
checkElementIndex(index);//检查越界
return node(index).item;
}
Node<E> node(int index) {
// assert isElementIndex(index);
if (index < (size >> 1)) {//size>>1 就是size的一半 靠近前半部就从头遍历 否则从尾部遍历
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;
}
}