顧名思義,arraylist的結構實際就是乙個陣列。所以它的特性很明顯,插入乙個元素的時候,是耗時是乙個常量時間o(1),在插入n個元素的時候,需要的時間就是o(n)。
arraylist類圖設計:
// 初始化預設容量
private
static
final
int default_capacity =10;
// 空物件陣列
private
static
final object[
] empty_elementdata =
;// 預設容量的空物件陣列
private
static
final object[
] defaultcapacity_empty_elementdata =
;// 實際儲存物件的陣列
transient object[
] elementdata;
// 儲存的數量
private
int size;
// 陣列能申請的最大數量
private
static
final
int max_array_size = integer.max_value -
8;
// 無參建構函式
public
arraylist()
// 指定初始化容量的建構函式
public
arraylist
(int initialcapacity)
else
if(initialcapacity ==0)
else
}// 引數乙個集合的建構函式
public
arraylist
(collection<
?extends
e> c)
else
}
public e get
(int index)
// 檢查index範圍是否正確
private
void
rangecheck
(int index)
// 從陣列裡取出元素
e elementdata
(int index)
public
boolean
add(e e)
// 初始化陣列的大小
private
void
ensurecapacityinternal
(int mincapacity)
// 檢查是否要擴容
ensureexplicitcapacity
(mincapacity);}
private
void
ensureexplicitcapacity
(int mincapacity)
private
void
grow
(int mincapacity)
// 最大的容量
private
static
inthugecapacity
(int mincapacity)
對於剛初始化的陣列,要初始化它的大小
判斷陣列大小是否足夠,如果不夠大,擴容1.5倍,對於擴容要判斷是否到達陣列的最大數量
public e remove
(int index)
刪除指定位置的元素,其後面的元素需要往前移。
public
boolean
remove
(object o)
// 不為null
}else
}return
false;}
private
void
fastremove
(int index)
public e set
(int index, e element)
設定index位置的元素值為element,返回該位置的原來的值
8、 addall(collection extends e> c)方法
public
boolean
addall
(collection<
?extends
e> c)
arraylist在隨機訪問的時候,陣列的結構導致訪問效率比較高,但是在指定位置插入,以及刪除的時候,需要移動大量的元素,導致效率低下,在使用的時候要根據場景特點來選擇,另外注意迴圈訪問的方式選擇。 JDK1 8 二 Thread 原始碼閱讀筆記
這裡有的未知的就不貼出來了 private volatile char name 執行緒名稱 private int priority 執行緒優先順序 private boolean single step 是否單步執行 private boolean stillborn false 虛擬機器狀態 ...
JDK1 8原始碼閱讀系列之一 ArrayList
本篇隨筆主要描述的是我閱讀 arraylist 原始碼期間的對於 arraylist 的一些實現上的個人理解,有不對的地方,請指出 先來看一下 arraylist 的繼承圖 由圖可以看出,arraylist 的父類有 abstractlist abstractcollection 所以我從 abst...
Vector原始碼解析 jdk1 8
概述 vector實現了list的介面,底層同樣是基於陣列實現的,可以儲存null。功能結構與arraylist的類似,不同的是執行緒安全的。建構函式protected object elementdata protected int capacityincrement public vector ...