java容器學習,ArrayList

2021-08-15 02:49:26 字數 1734 閱讀 7644

一、類圖

二、持有屬性

三、講解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...