Java.util.ArrayList詳解

來源:互聯網
上載者:User

標籤:

 

java.util.ArrayList就是傳說中的動態數組.



 

繼承了關係,有此可看出ArrayList與list的collection的關係

 

public class ArrayList<E> extends AbstractList<E>        implements List<E>, RandomAccess, Cloneable, java.io.Serializable

 

 

分析期特性

具有執行個體化性質,從實現了serializable就可以看出來

private static final long serialVersionUID = 8683452581122892189L;

 

 

 接下來定義了初始容量大小,和初始錐形。arralist裡面本身儲存的為一個Object類型的數組

    /**     * Default initial capacity.     */    private static final int DEFAULT_CAPACITY = 10;    /**     * Shared empty array instance used for empty instances.     */    private static final Object[] EMPTY_ELEMENTDATA = {};      private transient Object[] elementData;

 

 

 

 使用arraylist時需要執行個體化:有三種

 

  /**     * 初始化一個給定大小容量的數組List,主要用於如果本事知道這個list的大小時。     * 能最佳化如果大小超過預設容量時導致arralist每次都要去增加並建立一個新的list     * @param  initialCapacity  the initial capacity of the list     * @throws IllegalArgumentException if the specified initial capacity     *         is negative     */    public ArrayList(int initialCapacity) {        super();        if (initialCapacity < 0)            throw new IllegalArgumentException("Illegal Capacity: "+                                               initialCapacity);        this.elementData = new Object[initialCapacity];    }    /**     * 使用預設的大小10     */    public ArrayList() {        super();        this.elementData = EMPTY_ELEMENTDATA;    }    /**     * 根據一個collection來定義一個arralist     *     * @param c the collection whose elements are to be placed into this list     * @throws NullPointerException if the specified collection is null     */    public ArrayList(Collection<? extends E> c) {        elementData = c.toArray();        size = elementData.length;        // c.toArray might (incorrectly) not return Object[] (see 6260652)        if (elementData.getClass() != Object[].class)            elementData = Arrays.copyOf(elementData, size, Object[].class);    }

 

 Arraylist有提供期可能存在過多的空容量時清除處理

    public void trimToSize() {        modCount++;        if (size < elementData.length) {            elementData = Arrays.copyOf(elementData, size);        }    }

 

 

 

 另一個知識點。當arraylist新增時如果當前容量已滿時的處理過程

  public boolean add(E e) {        ensureCapacityInternal(size + 1);  // 判斷容量是否超標        elementData[size++] = e;        return true;    }   private void ensureCapacityInternal(int minCapacity) {        if (elementData == EMPTY_ELEMENTDATA) {            minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);// 容量超標情況        }        ensureExplicitCapacity(minCapacity);    }    private void ensureExplicitCapacity(int minCapacity) {        modCount++;        // overflow-conscious code        if (minCapacity - elementData.length > 0)// 如果超標,則處理            grow(minCapacity);    }    private void grow(int minCapacity) {        // overflow-conscious code        int oldCapacity = elementData.length; // 容量大小        int newCapacity = oldCapacity + (oldCapacity >> 1); //超標增加量計演算法,x+x/2=50%左右        if (newCapacity - minCapacity < 0)            newCapacity = minCapacity;        if (newCapacity - MAX_ARRAY_SIZE > 0)            newCapacity = hugeCapacity(minCapacity);        // 賦值原來的數組,並增加newCapacity個容量        elementData = Arrays.copyOf(elementData, newCapacity);    }     private static int hugeCapacity(int minCapacity) {        if (minCapacity < 0) // overflow            throw new OutOfMemoryError();        return (minCapacity > MAX_ARRAY_SIZE) ?            Integer.MAX_VALUE :            MAX_ARRAY_SIZE;    }

 

Java.util.ArrayList詳解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.