ArrayList原始碼閱讀筆記
原始碼分析
屬性
首先看看ArrayList的屬性。
/**
* 預設初始化容量
*/
private static final int DEFAULT_CAPACITY = 10;
/**
* 空陣列,如果傳入的容量為0時使用
*/
private static final Object[] EMPTY_ELEMENTDATA = {};
/**
*空陣列,傳傳入容量時使用,新增第一個元素的時候會重新初始為預設容量大小
*/
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
/**
*儲存資料元素的陣列
*/
transient Object[] elementData; // non-private to simplify nested class access
/**
* ArrayList的大小(包含資料元素的個數)
*/
private int size;
構造方法
無參構造方法
/**
* 建立一個初始容量為10的空列表
*/
public ArrayList() {
this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}
1234567
指定初始容量的構造方法
/**
* 建立一個指定容量的list
*/
public ArrayList(int initialCapacity) {
// 如果傳入的初始容量大於0,就新建一個陣列儲存元素
if (initialCapacity > 0) {
this.elementData = new Object[initialCapacity];
} else if (initialCapacity == 0) {
// 如果傳入的初始容量等於0,使用空陣列EMPTY_ELEMENTDATA
this.elementData = EMPTY_ELEMENTDATA;
} else {
throw new IllegalArgumentException("Illegal Capacity: "+
initialCapacity);
}
}
從其它集合構造
/**
* 把傳入集合的元素初始化到ArrayL ist中 m/
*/
public ArrayList(Collection c) {
//把集合轉為陣列
elementData = c.toArray();
if ((size = elementData.length) != 0) {
// 檢查c.toArray()返回的是不是Object[]型別,如果不是,重新複製成Object[].class型別
if (elementData.getClass() != Object[].class)
elementData = Arrays.copyOf(elementData, size, Object[].class);
} else {
// 如果是空集合,則初始化為空陣列EMPTY_ELEMENTDATA
this.elementData = EMPTY_ELEMENTDATA;
}
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69979119/viewspace-2712553/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 走進原始碼——ArrayList閱讀筆記原始碼筆記
- ArrayList原始碼閱讀(增)原始碼
- CopyOnWriteArrayList原始碼閱讀筆記原始碼筆記
- Koa 原始碼閱讀筆記原始碼筆記
- memcached 原始碼閱讀筆記原始碼筆記
- JDK原始碼閱讀:Object類閱讀筆記JDK原始碼Object筆記
- 閱讀原始碼,從ArrayList開始原始碼
- JDK原始碼閱讀(5):HashTable類閱讀筆記JDK原始碼筆記
- JDK原始碼閱讀(4):HashMap類閱讀筆記JDK原始碼HashMap筆記
- JDK原始碼閱讀:String類閱讀筆記JDK原始碼筆記
- LinkedList原始碼閱讀筆記原始碼筆記
- Express Session 原始碼閱讀筆記ExpressSession原始碼筆記
- guavacache原始碼閱讀筆記Guava原始碼筆記
- Tomcat原始碼閱讀筆記Tomcat原始碼筆記
- python原始碼閱讀筆記Python原始碼筆記
- JDK原始碼閱讀(7):ConcurrentHashMap類閱讀筆記JDK原始碼HashMap筆記
- goroutine排程原始碼閱讀筆記Go原始碼筆記
- Flask 原始碼閱讀筆記 開篇Flask原始碼筆記
- 【iOS印象】GLPubSub 原始碼閱讀筆記iOS原始碼筆記
- LongAdder原始碼閱讀筆記原始碼筆記
- Redux 學習筆記 – 原始碼閱讀Redux筆記原始碼
- 走進原始碼——Vector閱讀筆記原始碼筆記
- 走進原始碼——CopyOnWriteArrayList閱讀筆記原始碼筆記
- Redux 學習筆記 - 原始碼閱讀Redux筆記原始碼
- 原始碼閱讀之ArrayList實現細節原始碼
- Laravel 訊息通知原始碼閱讀筆記Laravel原始碼筆記
- ObjC runtime原始碼 閱讀筆記(一)OBJ原始碼筆記
- Go 1.9 sync Map 原始碼閱讀筆記Go原始碼筆記
- ArrayList原始碼閱讀,拒絕人云亦云~原始碼
- 【初學】Spring原始碼筆記之零:閱讀原始碼Spring原始碼筆記
- Django 原始碼閱讀筆記(基礎檢視)Django原始碼筆記
- Swift標準庫原始碼閱讀筆記 - DictionarySwift原始碼筆記
- tomcat8.5.57原始碼閱讀筆記1Tomcat原始碼筆記
- 【原始碼閱讀】AndPermission原始碼閱讀原始碼
- JDK1.8原始碼閱讀筆記(1)Object類JDK原始碼筆記Object
- Java Jdk1.8 HashMap原始碼閱讀筆記一JavaJDKHashMap原始碼筆記
- Java Jdk1.8 HashMap原始碼閱讀筆記二JavaJDKHashMap原始碼筆記
- 知其然知其所以然之ArrayList常用原始碼閱讀原始碼