list 是繼承colection的介面 我們主要學習他的實現類 arraylist 和 linkedlist
arraylist是基於陣列實現的 與陣列不同的是 它可以存放不同的資料型別的資料而且長度不定
// 我們分析一下他的底程實現
// 新增過程
public
boolean
add(e e)
// 如何做到長度可變
private
static
final object[
] defaultcapacity_empty_elementdata =
;transient object[
] elementdata;
// 資料是object型別的所以可以存放任意型別的資料
private
static
final
int default_capacity =10;
// 首先 他通過ensurecapacityinternal方法得到乙個最小容量
// 如果我們建立了乙個空arraylist 那麼他的預設容量就是10
private
void
ensurecapacityinternal
(int mincapacity)
//然後將得到的最小容量傳到ensureexplicitcapacity方法中
ensureexplicitcapacity
(mincapacity);}
// private
void
ensureexplicitcapacity
(int mincapacity)
private
static
final
int max_array_size = integer.max_value -8;
private
void
grow
(int mincapacity)
linkedlist 是基於鍊錶實現的 也是可以儲存不同型別的資料 長度不定
private
static
class
node
}
// 新增過程 我們呼叫add新增的時候是直接呼叫的linklast(e) 末尾新增
public
boolean
add(e e)
// 末尾新增
void
linklast
(e e)
STL原始碼分析 List
鍊錶是一種線性表,但不會按照線性的順序儲存。鍊錶每次插入和刪除乙個元素,只配置或者釋放乙個元素空間,對於任何位置的元素的插入或者刪除,list永遠是常量時間複雜度。template struct listnode 節點物件包含兩個節點物件指標,分別指向前乙個節點和後乙個節點,還有乙個節點物件存放的資...
STL原始碼分析之List
list是個環形雙向鍊錶,裡面的迭代器型別是bidirectional iterator tag,可以雙向移動,不想vector裡可以隨機訪問。同時刪除或新增結點對其他的迭代器無影響。list也有sort函式,我們知道sort函式只支援隨機訪問型迭代器,所有它的sort是自己另外宣告的。下面是原始碼...
4 2 list原始碼分析
list概述 list底層為非連續區間,即鍊錶 實質上是乙個雙向迴圈鍊錶 list每次插入或者刪除乙個元素,就配置和釋放乙個元素空間,對於任何位置的原屬插入或原屬移除,list永遠為常數時間。list的節點 首先要知道,list本身和list的節點是不同的,如果我們宣告乙個list,裡面放了100w...