ArrayList擴容原始碼分析

2022-09-23 09:45:13 字數 2564 閱讀 4808

實際是維護了乙個object型別的陣列(transientobject elementdata)

transient表示瞬時,表示該屬性不會被序列化

建立arraylist時,呼叫無參構造

初始elementdata容量為0第一次新增時,擴容至10

如果需要再次擴容時,則擴容為1.5倍

建立arraylist時,呼叫指定大小的構造器時

初始elementdata容量為指定大小

如果需要再次擴容時,則擴容為1.5倍

無參構造

public arraylist() ;

// 建立了乙個空的elementdata

this.elementdata = defaultcapacity_empty_elementdata;

}

說明第一次初始化時容量為0

新增方法add()

public boolean add(e e)
確認容量ensurecapacityinternal()
protected transient int modcount = 0;

private static final int default_capacity = 10;

private static final object defaultcapacity_empty_elementdata = {};

// ensurecapacityinternal()

// 此時引數為size + 1

private void ensurecapacityinternal(int mincapacity)

// calculatecapacity()

// 用於確定乙個mincapacity

private static int calculatecapacity(object elementdata, int mincapacity)

// mincapacity>10時,返回的是mincapacity

return mincapacity;

}// ensureexplicitcapacity()

// 此時mincapacity為calculatecapacity()返回值

// size+1<10時,返回的是10

// size+1>10時,返回的是size+1

private void ensureexplicitcapacity(int mincapacity)

// grow()

private void grow(int mincapacity)

// grow()結束到:

// ensureexplicitcapacity()結束到:

// ensurecapacityinternal()結束到add():

public boolean add(e e)

// add()結束

有參構造
public arraylist(int initialcapacity)  else if (initialcapacity == 0) ;

// 賦值空陣列

this.elementdata = empty_elementdata;

} else

}

add()
public boolean add(e e)
不同在擴容的判斷

private void ensurecapacityinternal(int mincapacity) 

// calculatecapacity()

// 用於確定乙個mincapacity

private static int calculatecapacity(object elementdata, int mincapacity)

// 返回的是size+1

return mincapacity;

}// ensureexplicitcapacity()

// 此時mincapacity為calculatecapacity()返回值

// 返回的是size+1

private void ensureexplicitcapacity(int mincapacity)

// grow()

private void grow(int mincapacity)

// grow()結束到:

// ensureexplicitcapacity()結束到:

// ensurecapacityinternal()結束到add():

public boolean add(e e)

// add()結束

Arraylist原始碼分析擴容

成員變數 序列化id private static final long serialversionuid 8683452581122892189l 預設初始化容量 private static final int default capacity 10 空的陣列 private static fi...

原始碼學習 ArrayList的擴容原始碼分析

原始碼如下 下面是arraylist的擴容機制 arraylist的擴容機制提高了效能,如果每次只擴充乙個,那麼頻繁的插入會導致頻繁的拷貝,降低效能,而arraylist的擴容機制避免了這種情況。如有必要,增加此arraylist例項的容量,以確保它至少能容納元素的數量 param mincapac...

ArrayList 擴容機制原始碼分析

本篇通過閱讀jdk1.8原始碼,了解arraylist是如何進行自動擴容的。初始化無參構造方法建立arraylist arraylist arraylist new arraylist 原始碼 private static final object defaultcapacity empty ele...