首先還是從建構函式開始
/**
* 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...