java集合 ArrayList原始碼分析

2021-08-10 17:04:28 字數 1576 閱讀 8198

arraylist是一種基於陣列實現的集合類,也是平常經常使用到的集合。其特性歸納如下:特性值

是否順序儲存

順序是否可重複儲存

可以是否可儲存null

可以是否執行緒安全

非執行緒安全

屬性說明

elementdata

arraylist是基於陣列實現的,這就是arraylist用於儲存

size

儲存元素的總數

threshold

臨界值,當元素數量大於thresholdthreshold,會進行擴容操作

public

arraylist(int initialcapacity)

public

arraylist()

和hashmap一樣,在新建arrzylist時可以選擇是否指定容量,同樣建議在可以的情況下,盡量指定乙個容量,有利於提高效率。

先看一下

public

boolean

add(e e)

作用是新增乙個元素到列表的最後面,先看一下第一行**:

private

void

ensurecapacityinternal(int mincapacity)

ensureexplicitcapacity(mincapacity);

}

在容量不夠的情況下,對存放元素的陣列進行擴容,每次新增乙個長度。因為陣列的長度是固定的,所以使用 arrays.copyof,新建乙個長度是目前1.5倍的陣列,並且複製原陣列的資料。

arraylist可以在指定的索引位置,新增元素:

public

void add(int

index, e element)

先判斷指定的索引是否有越界,和add(e element)還不一樣的地方是第4行,還需要對於index之後的元素都複製到index+1的位置。

get方法很簡單,先判斷指定的索引是否有越界,在直接返回指定索引的資料。因此arrzylist的get方法時間複雜度是1,效率很高。

public e get(int

index)

也很簡單,取出之前的元素,設定新的元素,時間複雜度也是1。

public e set(int

index, e element)

public e remove(int

index)

也是使用了上面提高的陣列複製,把index之後的所有元素,複製到index-1,相當於向前挪了一位。

1.arraylist是基於陣列實現的乙個集合類

2.arraylist的get,set,add(element,e)的效率都很高,時間複雜為o(1)

3.arraylist的remove,add(int index, e element),時間複雜為o(n)。如果有大量的這2個的操作,可以使用linkedlist

4.arraylist是非執行緒安全的

Java集合 ArrayList集合

以陣列實現。節約空間,但是陣列有容量限制。超出限制時會增加50 容量,用system.arraycopy 複製到新的陣列,因此最好能給出陣列大小的預估值。預設第一次插入元素時建立大小為10 的陣列。按照陣列下標來訪問元素 get i set i,e 的效能很高,這是陣列的基本優勢。直接在陣列末尾加入...

Java基礎 集合ArrayList

集合類 物件導向類,對事物的描述都是通過物件實現。為方便對多個物件進行操作,必須對多個物件進行儲存,因此需要容器類。容器類特點是長度可變。stringbuilder只能存放字串。int等陣列雖能存放自定義型別,但長度固定。arraylist是一種特殊的資料型別,泛型。arraylist 構造乙個初始...

Java學習筆記 集合Arraylist

arraylist集合 arraylist list new arraylist 可以使object型也可以是類。通過例子說明arraylist的使用方法 arraylist list new arraylist list.add i 向list中新增乙個值object型的i值,list.add i...