類定義
public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, java.io.Serializable
從類的定義我們可以直觀的知道LinkedList擁有List和Deque(雙向隊列)的雙重特性.也就是說LinkedList是一種雙向鏈表的實現(xiàn)方式,大家都知道鏈表的一個基本實現(xiàn)方式是通過每個節(jié)點之間前后指向關系來體現(xiàn)的,在Java中也一樣,LinkedList擁有一個內部實現(xiàn)類Node,通過Node的next,prev屬性連保持各個節(jié)點之間的聯(lián)系.下面我將從我的理解,詳細講解LinkedList的實現(xiàn)方式.
效率: 插入都快速, 查找都緩慢(下標查找方式時,會使用折半再查找的方式)
成員變量屬性
修飾符 | 變量 | 作用 |
---|---|---|
transient int | size | 默認的初始化數(shù)組存儲空間大小 |
transient Node<E> | first | 指向鏈表的第一個節(jié)點 |
transient Node<E> | last | 指向鏈表的最后一個節(jié)點 |
protected transient int | modCount | 繼承自AbstractList,記錄size變化的次 |
內部類Node結構
private static class Node<E> {
E item;
Node<E> next;
Node<E> prev;
Node(Node<E> prev, E element, Node<E> next) {
this.item = element;
this.next = next;
this.prev = prev;
}
}
Node的結構很簡單,就是維護一個當前節(jié)點的值, next指向下一個節(jié)點,prev指向前一個節(jié)點
隊列方法
public void addFirst(E e)
前端插入數(shù)據(jù)
public void addLast(E e)
后端插入數(shù)據(jù)
根據(jù)下標查找會折半
public E get(int index) {
checkElementIndex(index);
return node(index).item;
}
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;
}
}
查看源碼發(fā)現(xiàn)并沒有難點問題需要記錄, 故在此不再贅述, 需要注意的地方在ArrayList中已說明