java集合學習-ArraryList


上圖,畫工差,大家隨便看看。

ArrayList

1.ArrayList是什么?有什么特點

(1)ArrayList是基於數組實現的,是一個動態數組,其容量能自動增長。  

(2)ArrayList不是線程安全的, ArrayList實現了Serializable接口,因此它支持序列化。

(3)實現了RandomAccess接口,支持快速隨機訪問,實際上就是通過下標序號進行快速訪問。

(4)實現了Cloneable接口,能被克隆

2.ArrayList實現源碼

 2.1構造方法

  很明顯ArrayList就是一個數組哈。

//1-----------------------
public ArrayList() {
        this(10);
        //調用ArrayList(10) 默認初始化一個大小為10的object數組。
    }

//2-------------------------
public ArrayList(int initialCapacity) {    
        if (initialCapacity < 0)
            throw new IllegalArgumentException("Illegal Capacity: "+
                                               initialCapacity);
         //如果用戶初始化大小小於0拋異常,否則新建一個用戶初始值大小的object數組。                                      
        this.elementData = new Object[initialCapacity];
    } 

//3--------------------------
public ArrayList(Collection<? extends E> c) {
        elementData = c.toArray();
        size = elementData.length;
        // 當c.toArray返回的不是object類型的數組時,進行下面轉化。
        if (elementData.getClass() != Object[].class)
            elementData = Arrays.copyOf(elementData, size, Object[].class);
    }

2.2 看下add(E e)方法

//1-----------------------
public boolean add(E e) {
        ensureCapacityInternal(size + 1);  // 加入元素前檢查數組的容量是否足夠
        elementData[size++] = e;
        return true;
    }
//2----------------------- 
private void ensureCapacityInternal(int minCapacity) {
        modCount++;
        // 如果添加元素后大於當前數組的長度,則進行擴容
        if (minCapacity - elementData.length > 0)
            grow(minCapacity);
    } 
//3-----------------------  
private void grow(int minCapacity) {
        // overflow-conscious code
        int oldCapacity = elementData.length;
        //將數組的長度增加原來數組的一半。
        int newCapacity = oldCapacity + (oldCapacity >> 1);
        if (newCapacity - minCapacity < 0)
            newCapacity = minCapacity;
            //如果擴充一半后仍然不夠,則 newCapacity = minCapacity;minCapacity實際元素的個數。
        if (newCapacity - MAX_ARRAY_SIZE > 0)
            newCapacity = hugeCapacity(minCapacity);
            //數組最大位2^32
        // minCapacity is usually close to size, so this is a win:
        elementData = Arrays.copyOf(elementData, newCapacity);
    }    

 

 

 


免責聲明!

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



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