ArrayList概述:
ArrayList是List接口的可變數組的實現。實現了所有可選列表操作,並允許包括null在內的所有元素。除了實現列表接口外,此類還提供一些方法來操作內部用來存儲列表的數組的大小。每個ArrayList的實例都有一個容量,該容量是指用來存儲列表元素的數組的大小。隨着向ArrayList中中不斷添加元素,其容量也自動增長。自動增長會帶來數據向新數組的重新拷貝,因此,如果可預知數據量的多少,可在構造的ArrayList時指定其容量。在添加大量元素前,應用程序也可以使用的ensureCapacity操作來增加ArrayList的實例的容量,這可以減少遞增式再分配的數量。
Arraylist 實現了list接口,底層是使用數組存放數據,實際上操作就是對數組的操作。
ArrayList實現:
1)數組實現
private transient Object [] elementData;
2)構造方法:(3種實現方式)
1)構造默認的初始化容量列表;
2)構造一個指定的初始化容量的空列表;
3)構造一個包含指定collection的元素的列表,這些元素按照collection的迭代器,返回他們的順序排列的;
Java代碼:
- public ArrayList(){
- 這(10 )
- }
- public ArrayList(int initialCapacity){
- super ();
- if (initialCapacity < 0 )
- 拋出新的 IllegalArgumentException(“Illegal Capacity:” + initialCapacity);
- 這個.elementData = new Object [initialCapacity];
- }
- public ArrayList(Collection <? extends E> c){
- elementData = c.toArray();
- size = elementData.length;
- // c.toArray可能(不正確)不返回Object [](見6260652)
- if (elementData.getClass()!= Object [] 。class )
- elementData = Arrays.copyOf(elementData,size,Object [] .class );
- }
3)存儲:
@Override
public boolean add(Object obj) {
exp1();
this.obj[this.size++] = obj;
return true;
}
4)刪除:
@Override
public boolean remove(int index) {
if((index + 1) != this.size){
this.exp2(this.obj, index + 1, this.obj, index, this.size - index);
}
this.obj[this.size] = null;
this.size--;
return true;
}
5)制空:
@Override
public boolean isEmpty() {
return this.obj.length == 0 ? true : false;
}
6)調整
數組容量:從上面介紹的向ArrayList中存儲元素的代碼中,我們看到,每當向數組中添加元素時,都要去檢查添加后元素的個數是否會超出當前數組的長度,如果超出,數組將會進行擴容,以滿足添加數據的需求。
