前言:
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比較?當然這是可以的,但是難免效率很低,...