實現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 對樹的插入,刪除操作執行效率低...
學習筆記 資料結構 雜湊
雜湊表的特點 什麼是完全雜湊 雜湊方式 直接定址表的特點 雜湊表的特點,可以解決什麼問題 什麼是衝突 如何避免衝突 鏈結法的特點,插入,刪除,查詢的時間複雜度是多少 開放定址方法的原理 什麼是裝載因子 雜湊函式有什麼 同義詞的概念 聚集 堆積 現象 單向雜湊表的特徵 如何提高雜湊表的查詢效率 通過一...