JDK1 8原始碼閱讀(五) ArrayList

2021-10-06 06:08:51 字數 2523 閱讀 7072

顧名思義,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 ...