Java ArrayList trimToSize()


前幾天看了Java ArrayList,沒有明白trimToSize()這個方法是什么意思,所以看了一下源碼並且debug一下自己的一個例子,明白了其中的含義。貼在這里。

       ArrayList al = new ArrayList(10);
        for(int i=0;i<10;i++){
            al.add(i);
        }
        al.add(1);
        al.trimToSize();

例子很簡單,就是new一個初始容量為10的ArrayList,之后向里面加入一個元素。接下來看看debug的內容:

可以看到,向ArrayList里面加入10個元素之后,elementData的內容如圖所示。

elementData數組動態增長到容量為15。這是我們看看ArrayList的源碼:

 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);
    }

olaCapacity = 10,1010(10)右移一位位0101(5),newCapacity = 10 + 5 = 15;

之后調用trimToSize()方法,再看看debug內容:

此時elementData的大小變為了11。也就是說這個方法將elementData的數組設置為ArrayList實際的容量,動態增長的多余容量被刪除了。

再貼個trimToSize()方法的源碼:用Arrays.copyOf(T [],int newLength)這個方法來截取elementData數組。

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

 


免責聲明!

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



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