一、類圖
二、持有屬性
三、講解modcount屬性
四、構造器
五、擴容
六、內部類
二、arraylist持有屬性:
private static final int default_capacity = 10; //預設擴容大小,第一次擴容,如果容器大小小於10,預設為10;
private static final object empty_elementdata = {}; //靜態預設的空陣列
private transient object elementdata; //儲存元素的陣列
private int size; //陣列大小
//該屬性用於檢視是否有其他執行緒修改了該容器,當使用add,clear,remove等方法是該屬性加1,如下
protected transient int modcount = 0; //乙個來之abstractlist父類的
//arraylist不允許多執行緒操作,如有併發操作,直接丟擲異常
//修改次數加1,
public void clear()
//當你返回乙個iterator例項時,該例項有如下屬性和方法
private class itr implements iterator
}//所以當使用iterator遍歷arraylist的時候,一旦執行add等方法modcount的值發生改變,就會丟擲concurrentmodificationexception異常。
//所以arraylist是不允許多執行緒共享。
arraylist(int initialcapacity); //自定義大小初始化容器,傳入的值小於零會報異常
arraylist(); //直接初始化容器,容器大小為0
arraylist(collection extends e> c) //使用已有容器初始化現在容器,直接使用system.arraycopy複製陣列
五、擴容
//當容器大小不足時,會擴容,擴容大小如下,也就是會增加原來的二分之一
int newcapacity = oldcapacity + (oldcapacity >> 1);
六、內部類
class itr implements iterator//用於遍歷arraylist,從0開始遍歷到末尾
class listitr extends itr implements listiterator//用於遍歷arraylist,可以在任意位置往前往後遍歷,使用arraylist的listiterator()得到
class sublist extends abstractlistimplements randomaccess
//子容器,所有的操作都會對映到原來的容器,通過sublist(int fromindex, int toindex)得到,得到的是sublist型別,不是arraylist型別。
以上介紹的arraylist部分基本功能和結構
以上分析是針對jdk1.7的學習。如有錯誤,請糾正,謝謝支援!
Java中的Vector與ArrayList的區別
首先看這兩類都實現list介面,而list介面一共有三個實現類,分別是arraylist vector和linkedlist。list用於存放多個元素,能夠維護元素的次序,並且允許元素的重複。1 arraylist 是最常用的list實現類,內部是通過陣列實現的,它允許對元素進行快速隨機訪問。陣列的...
原始碼解析java集合框架,ArrayList原始碼
arraylist是list介面下的乙個實現類,arraylist是乙個動態陣列,底層資料結構為可以動態增長的陣列,相比陣列來說,arraylist可以動態的增加刪除元素,有成熟的擴容演算法。如圖,為arraylist資料結構,是乙個記憶體連續且緊湊的陣列。arraylist訪問元素時間複雜度為o ...
Java學習筆記 容器之List
本文主要是分析實現list介面的arraylist linkedlist vector stack的原始碼。1.arraylist arraylist是使用object陣列儲存資料的,並且加上了transient關鍵字,所以在arraylist序列化時,elementdata不會直接被序列化 tra...