Java學習筆記 資料結構 ArrayList

2021-08-18 11:33:50 字數 2023 閱讀 7692

實現list介面的可重置大小的陣列。

public

arraylist()

看一下涉及到的成員變數

transient 關鍵字先不去管它,我們看到,呼叫arraylist的無參構造方法時,實際是把乙個空的object陣列賦給了elementdata。

transient object elementdata; // non-private to simplify nested class access

private

static

final object defaultcapacity_empty_elementdata = {};

使用int型別的整數為arraylist指定初始容量,分三種情況:

1. capacity > 0, 建立大小為capacity的object陣列。

2. capacity = 0, 建立乙個空的object陣列。

3. capacity < 0, 丟擲異常。

public

arraylist(int initialcapacity) else

if (initialcapacity == 0) else

}

先確保容量最小為 size + 1,保證下乙個元素能夠被加到arraylist裡。呼叫ensurecapacityinternal方法,確保新的元素能夠放入arraylist後,把元素放到表的末尾(緊跟在最後乙個元素後面)。

public

boolean

add(e e)

考慮到使用無參建構函式arraylist()的情況:

private

void

ensurecapacityinternal(int mincapacity)

private

static

intcalculatecapacity(object elementdata, int mincapacity)

return mincapacity;

}

然後是ensureexplicitcapacity方法

private

void

ensureexplicitcapacity(int mincapacity)

如果mincapacity - elementdata.length > 0,也就是elementdata陣列裝滿了元素,那麼就擴容為當前容量的1.5倍。

private

void

grow(int mincapacity)

/* 某些vm會保留一些頭部字(header words) */

private

static

inthugecapacity(int mincapacity)

/* 允許的最大陣列大小 */

private

static

final

int max_array_size = integer.max_value - 8;

與add(e e)的不同之處在於,add(int index, e e) 要把index及以後的元素後移一位。而且要先進行邊界檢查。

public

void add(int

index, e element)

private

void rangecheckforadd(int

index)

public e remove(int

index)

public

boolean remove(object o)

} else

}return

false;

}private

void fastremove(int

index)

學習筆記 資料結構

一 常用的資料結構 1 線性資料結構 元素之間一般存在元素之間存在一對一關係,是最常用的一類資料結構,典型的有 陣列 棧 佇列和線性表 2 樹形結構 結點間具有層次關係,每一層的乙個結點能且只能和上一層的乙個結點相關,但同時可以和下一層的多個結點相關,稱為 一對多 關係,常見型別有 樹 堆 3 圖形...

學習筆記 資料結構 堆結構

堆結構 實質是陣列 特點 以陣列的形式去儲存完全二叉樹 原理 以前序遍歷完全二叉樹,得出結點的前序序列,以陣列的形式儲存該序列。查詢父,子結點通過陣列下標id間的轉換關係實現。優點 節省儲存空間,查詢效率高 缺點 1 只能表示完全二叉樹 更廣泛的可以說是完全n叉樹 2 對樹的插入,刪除操作執行效率低...

學習筆記 資料結構 雜湊

雜湊表的特點 什麼是完全雜湊 雜湊方式 直接定址表的特點 雜湊表的特點,可以解決什麼問題 什麼是衝突 如何避免衝突 鏈結法的特點,插入,刪除,查詢的時間複雜度是多少 開放定址方法的原理 什麼是裝載因子 雜湊函式有什麼 同義詞的概念 聚集 堆積 現象 單向雜湊表的特徵 如何提高雜湊表的查詢效率 通過一...