二、linkedlist原始碼分析
上篇看了下arraylist原始碼,這篇記錄下linkedlist原始碼分析
linkedlist 繼承 abstractsequentiallist 提供了對元素順序訪問的抽象
linkedlist 實現 deque介面,底層構成雙向鍊錶結構
linkedlist 實現 cloneable 可以轉殖
linkedlist 實現了serializable介面,可以進行序列化和反序列化操作,可以在網路上進行傳輸和儲存
linkedlist底層採用雙向列表的形式儲存
linkedlist 成員變數
//指向鍊錶第乙個節點
transient nodefirst;
//指向鍊錶最後乙個節點
transient nodelast;
linkedlist 建構函式
public
linkedlist()
public
linkedlist(collection<? extends e> c)
向linkedlist 增加元素
public
boolean
add(e e)
//直接在鍊錶後插入
void linklast(e e)
//節點內部類
private
static
class
node }
//在列表開始位置插入
public
void
addfirst(e e)
private
void
linkfirst(e e)
//在固定位置插入元素
public
void
add(int index, e element)
//獲取指定位置的元素
nodenode(int index) else
}//將新元素插入到指定位置的前面
void linkbefore(e e, nodesucc)
//在指定位置插入集合
public
boolean
addall(int index, collection<? extends e> c) else
for (object o : a)
//如果succ則將加入集合的最後乙個元素作為新鍊錶的最後乙個節點,或者succ就是集合的最後乙個元素的後繼節點,succ前驅節點就是集合的最後乙個元素
if (succ == null) else
size += numnew;
modcount++;
return
true;
}
linkedlist 查詢元素
//獲取指定位置元素
public e get(int index)
//獲取第乙個節點
public e getfirst()
//獲取最後乙個節點
public e getlast()
//獲取第乙個節點元素
public e element()
//獲取並刪除第乙個節點元素
public e poll()
linkedlist 刪除元素 就是將他的前驅後後繼節點不指向它
//刪除第乙個節點元素
public e remove()
public e removefirst()
private e unlinkfirst(nodef)
//刪除最後乙個節點元素
public e removelast()
private e unlinklast(nodel)
//刪除指定位置的元素
public e remove(int index)
e unlink(nodex) else
if (next == null) else
x.item = null;
size--;
modcount++;
return element;
}
linkedlist 入棧和出棧
//入棧
public
void
push(e e)
//出棧
public e pop()
總結:
1.linkedlist 底層是基於雙向鍊錶實現的 元素都可以為null,所以增加元素效率很高只需要挑戰指標,但是查詢,要遍歷鍊錶元素,效率低
2.linkedlist 是執行緒不安全的
java原始碼 LinkedList 二
1.先看下內部的增刪改查方法,對外的方法都是建立在內部方法基礎上的 a.插入到頭結點之前 links e as first element.private void linkfirst e e b.加入尾節點之後 links e as last element.void linklast e e c...
LinkedList 原始碼分析
linkedlist資料結構是 雙向鍊錶 先來講下單鏈表和雙向鍊錶 雙向鍊錶 單鏈表相對於雙向鍊錶來說,結構簡單。但有乙個缺點,即在單鏈表中只能通過乙個節點的引用訪問其後續節點,無法直接訪問其前驅節點,如果在單鏈表中想找到某個幾點的前驅節點,必須遍歷鍊錶,耗費時間。因此擴充套件了單鏈表,在單鏈表結構...
LinkedList原始碼分析
資料結構 linkedlist是雙向迴圈鍊錶 1.構造方法 constructs an empty list.構造乙個空的列表 public linkedlist private transient entryheader new entry null,null,null entry e eleme...