ArrayList底層實現原理


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代碼:

  1. public  ArrayList(){  
  2.     10 )  
  3. }  
  4.   
  5. public  ArrayList(int  initialCapacity){  
  6.     super ();  
  7.     if  (initialCapacity <  )  
  8.         拋出新的 IllegalArgumentException(“Illegal Capacity:” + initialCapacity);   
  9.     這個.elementData =  new  Object [initialCapacity];  
  10. }  
  11.   
  12. public  ArrayList(Collection <?  extends  E> c){  
  13.     elementData = c.toArray();  
  14.     size = elementData.length;  
  15.     // c.toArray可能(不正確)不返回Object [](見6260652)  
  16.     if  (elementData.getClass()!= Object [] 。class )  
  17.         elementData = Arrays.copyOf(elementData,size,Object [] .class );  
  18. }  

  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中存儲元素的代碼中,我們看到,每當向數組中添加元素時,都要去檢查添加后元素的個數是否會超出當前數組的長度,如果超出,數組將會進行擴容,以滿足添加數據的需求。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM