List原始碼分析

2021-09-20 18:43:21 字數 1323 閱讀 1152

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...