徹底明白LinkedList插入資料的實現原理

2021-10-07 12:07:17 字數 1422 閱讀 7110

前言:

linkedlist是通過乙個雙向鍊錶來實現的,它允許插入所有元素,包括null,它是執行緒不安全的

1、雙向鍊錶是什麼樣子

如下圖:雙向鍊錶有乙個first指標和next指標,分別指向頭結點和尾結點。另外還有乙個前指標和後指標,指向前驅結點和後繼結點

上篇部落格我們著重的講解了arraylist的擴容機制和add 方法,其中arraylist如果在指定位置插入相關元素是非常耗時的,時間複雜度為o(n),那麼這個雙向鍊錶到底是如何實現插入資料的呢,請看下圖:

2、原始碼分析

2.1 屬性

// 鍊錶的結點個數

transient

int size =0;

// 指向頭結點的指標

transient node

first;

//指向尾結點的指標

transient node

last;

2.2node類

注意這是乙個靜態內部類:

private static class node

}

2.3 從鍊錶尾部新增資料

當向表尾插入乙個節點時,很顯然當前節點的後繼一定為 null,而前驅結點是 last 指標指向的節點,然後還要修改 last 指標指向新的尾節點。此外,還要修改原來尾 節點的後繼指標,使它指向新的尾節點

原始碼的實現如下:

void

linklast

(e e)

從鍊錶首部新增資料和上邊的邏輯類似,後面就不陳述了。

2.4從鍊錶中間插入資料

原始碼:這個與下圖匹配一塊看

//succ表示的是當前結點,就是所要插入的位置的前乙個結點

3、總結

(1) linkedlist 的底層結構是乙個帶頭、尾指標的雙向鍊錶,可以快速的對頭/尾節點 進行操作。

(2)相比arraylist,鍊錶的特點就是在指定位置插入和刪除元素的效率較高,但是查詢的效率不如arraylist。

徹底明白IP位址

通過ip位址和子網掩碼與運算計算相關位址 知道ip位址和子網掩碼後可以算出 1 網路位址 2 廣播位址 3 位址範圍 4 本網有幾台主機 例1 下面例子ip位址為192 168 100 5 子網掩碼是255 255 255 0。算出網路位址 廣播位址 位址範圍 主機數。一 分步驟計算 1 將ip位址...

徹底弄明白LDO

工作原理 ldo內部基本都是由4大部件構成,分別是分壓取樣電路 基準電壓 誤差放大電路和電晶體調整電路。分壓取樣電路 通過電阻r1和 r2對輸出電壓進行採集 誤差放大電路 將採集的電壓輸入到比較器反向輸入端,與正向輸入端的基準電壓 也就是期望輸出的電壓 進行比較,再將比較結果進行放大,電晶體調整電路...

徹底明白equals和hashCode

test public void test hashcode方法是通過一定的演算法得到乙個hash值,一般配合雜湊集合一起使用,如hashmap hashset都是不可以存放重複元素的,那麼當容器中元素個數很多時,你要新增乙個元素時,難道乙個乙個去equals比較?當然這是可以的,但是難免效率很低,...