LinkedList底层的实现基于双向表
prev | data | next |
next指向下一个node的地址。prev指向上一个node。
这里的代码是LinkedList类的源码。
private static class Node<E> {
//业务数据 E item;
//指向下个node Node<E> next;
//指向上个node Node<E> prev; Node(Node<E> prev, E element, Node<E> next) { this.item = element; this.next = next; this.prev = prev; } }
那么当我们是用list.add(e);方法时会添加到这个链表的末位
public boolean add(E e) { linkLast(e); return true; }
那么链表的首尾node的prev和next,看实现代码
也就是说,firstnode的prev和lastNode的next为null
private void linkFirst(E e) { //这里首先获得firstNode final Node<E> f = first; //这里的新的Node final Node<E> newNode = new Node<>(null, e, f); //此node成为新的firstNode first = newNode; //如果原来firstNode为空的话,说明这个list为空,那么这时FirstNode也就是lastNode,这个链表只有一个node if (f == null) last = newNode; else f.prev = newNode; size++; modCount++; } /** * Links e as last element.代码解释如上。 */ void linkLast(E e) { final Node<E> l = last; final Node<E> newNode = new Node<>(l, e, null); last = newNode; if (l == null) first = newNode; else l.next = newNode; size++; modCount++; }