jdk原始碼閱讀 linkedlist

2021-08-15 13:46:40 字數 1413 閱讀 6973

首先還是從建構函式開始

/**

* constructs an empty list.

*/public

linkedlist()

是乙個空的

然後我們從add看

public

boolean

add(e e)

定位到linklast

void linklast(e e) 

//觀察發現這個node是乙個雙向鍊錶,每乙個節點指著自己前面和身後的節點

private

static

class

node

}

現在看一下迭代器部分

private

class

listitr

implements

listiterator

//檢視有沒有下乙個節點

public

boolean

hasnext()

public e next()

//在看一下比較重要的刪除

public

void

remove()

}

剛才迭代器的建構函式中有乙個node方法我們看下

nodenode(int index)  else 

}

現在看一下remove方法

public

boolean

remove(object o)

}} else }}

return

false;

}

可以看出 ,首先是判斷了一下是不是刪除乙個null節點,

然後從頭開始找,這裡的刪除的話也沒有利用到雙向鍊錶的優點

當然還有乙個方法是這樣的

public e remove(int index)
根據節點的編號,那就能利用到雙向鍊錶的優點很快的找到刪除

之後get和set方法 也是一樣很簡單

public e get(int index) 

public e set(int index, e element)

checkelementindex 的作用是判斷你要要找的點的index是不是大於0小於size

之後的話就是通過node函式去找,上面有node函式的介紹

總結一下

linkedlist 底層是乙個雙向鍊錶,查點的時候會先判斷點在前半段還是後半段,他增加刪除節點的時候能充分利用鍊錶的特性不需要移動元素,但是查詢的時候需要遍歷,沒有arraylist快

JDK 原始碼 閱讀

to be continuing.持續修改中。1.stringbuffer 所處類層次 易忽略點 這個類是執行緒安全的。所有的method直接或間接加synchronized。所以我們如果是單執行緒情況下也考慮到這個會不會影響到效率。當然可能jit可以進行這個優化,待我接下來驗證。預設情況下乙個長為...

JDK原始碼閱讀 Integer

先上一版字串轉數值的幾個方法的區別 parseint string s 解析字串數,10進製,返回int parseint string s,int radix 解析字串數,radix為指定進製,支援2 36進製 decode string nm 解析字串數,0開頭的為8進製,如010解析為2 0x...

JDK原始碼閱讀(三) LinkedHashMap

一 linkedhashmap原理 static class entryextends hashmap.node 二 hashmap分析 1 關鍵的屬性 表示linkedhashmap的頭節點 transient linkedhashmap.entryhead 表示尾節點 transient lin...