LinkedList底层是用双向链表实现的;
下面看其构造方法:
public LinkecList(){
header.next=header.previous=header;
}
此处构造了双向链表的一个头节点。
再看一下header的定义:
private transient Entry<E> header = new Entry<E>(null, null, null);
然后在看Entry
private static class Entry<E> {
E element;
Entry<E> next;
Entry<E> previous;
。
。
。
}
这不正是双向链表的节点定义方式吗
下面看add(E e)方法:
public boolean add(E e) {
addBefore(e, header);
return true;
}
private Entry<E> addBefore(E e, Entry<E> entry) {
Entry<E> newEntry = new Entry<E>(e, entry, entry.previous);
newEntry.previous.next = newEntry;
newEntry.next.previous = newEntry;
size++;
modCount++;
return newEntry;
}
这是在头节点之前加入一个元素,同理,对于LinkedList的一些操作都是基于对双向列表的操作,因此,当我们往链表里面添加数据时,底层构造一个Entry对象,然后把这个对象放到链表之中