ArrayList 如何增長大小

JDK1.8

private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}; transient Object[] elementData;    public ArrayList() { this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA; }
1. ArrayList的列表對象實質上是存儲在一個引用型數組裏的,有人認爲該數組有「自動增加機制」能夠自動改變size大小。正式地說,該數組是沒法改變
大小的,實際上它只是改變了該引用型數組的指向而已。下面,讓咱們來看看java是怎樣實現ArrayList類的。

2.
其次,以指定初始容量(Capacity)或把指定的Collection轉換爲引用型數組後實例化elementData數組;若是沒有指定,則預置初始容量爲10進行
實例化。把私有數組預先實例化,而後經過copyOf方法覆蓋原數組,是實現自動改變ArrayList的大小(size)的關鍵。有人說ArrayList是複雜的數組,我
認爲不如說ArrayList是關於數組的系統的方法組合。

3.
CAPACITY 是分配的大小,SIZE是實際的佔用大小。
    private static final int DEFAULT_CAPACITY = 10;

 

private void grow(int minCapacity) {
        // overflow-conscious code
        int oldCapacity = elementData.length;
        int newCapacity = oldCapacity + (oldCapacity >> 1);
        if (newCapacity - minCapacity < 0)
            newCapacity = minCapacity;
        if (newCapacity - MAX_ARRAY_SIZE > 0)
            newCapacity = hugeCapacity(minCapacity);
        // minCapacity is usually close to size, so this is a win:
        elementData = Arrays.copyOf(elementData, newCapacity);
    }
相關文章
相關標籤/搜索