Java中的ArrayList.trimToSize()方法詳解
ArrayList.trimToSize()方法
在看《Java 核心技術(shù)卷一》時(shí),認(rèn)識(shí)到了trimToSize()這個(gè)方法。
原文內(nèi)容如圖所示。
接下來(lái)拿例子來(lái)參考一下:

下文內(nèi)容轉(zhuǎn)載自其他博主blog,講解的很清晰。
前幾天看了Java ArrayList,沒(méi)有明白trimToSize()這個(gè)方法是什么意思,所以看了一下源碼并且debug一下自己的一個(gè)例子,明白了其中的含義。貼在這里。
ArrayList al = new ArrayList(10);
for(int i=0;i<10;i++){
al.add(i);
}
al.add(1);
al.trimToSize();
例子很簡(jiǎn)單,就是new一個(gè)初始容量為10的ArrayList,之后向里面加入一個(gè)元素。接下來(lái)看看debug的內(nèi)容:

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

elementData數(shù)組動(dòng)態(tài)增長(zhǎng)到容量為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);
}
oldCapacity = 10,1010(10)右移一位位0101(5),newCapacity = 10 + 5 = 15; 之后調(diào)用trimToSize()方法,再看看debug內(nèi)容:

此時(shí)elementData的大小變?yōu)榱?1。也就是說(shuō)這個(gè)方法將elementData的數(shù)組設(shè)置為ArrayList實(shí)際的容量,動(dòng)態(tài)增長(zhǎng)的多余容量被刪除了。
再貼個(gè)trimToSize()方法的源碼:用Arrays.copyOf(T [],int newLength)這個(gè)方法來(lái)截取elementData數(shù)組。
public void trimToSize() {
modCount++;
if (size < elementData.length) {
elementData = Arrays.copyOf(elementData, size);
}
}
到此這篇關(guān)于Java中的ArrayList.trimToSize()方法詳解的文章就介紹到這了,更多相關(guān)ArrayList.trimToSize()方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java統(tǒng)計(jì)漢字字?jǐn)?shù)的方法示例
這篇文章主要介紹了java統(tǒng)計(jì)漢字字?jǐn)?shù)的方法,結(jié)合實(shí)例形式分析了java正則判定、字符串遍歷及統(tǒng)計(jì)相關(guān)操作技巧,需要的朋友可以參考下2017-05-05
Springboot整合SpringSecurity實(shí)現(xiàn)登錄認(rèn)證和鑒權(quán)全過(guò)程
這篇文章主要介紹了Springboot整合SpringSecurity實(shí)現(xiàn)登錄認(rèn)證和鑒權(quán)全過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12
JavaWeb分頁(yè)的實(shí)現(xiàn)代碼實(shí)例
這篇文章主要介紹了JavaWeb分頁(yè)的實(shí)現(xiàn)代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12
通過(guò)實(shí)例解析Spring組合注解與元注解
這篇文章主要介紹了通過(guò)實(shí)例解析Spring組合注解與元注解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11
Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(21)
下面小編就為大家?guī)?lái)一篇Java基礎(chǔ)的幾道練習(xí)題(分享)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧,希望可以幫到你2021-07-07
java 反射調(diào)用Service導(dǎo)致Spring注入Dao失效的解決方案
這篇文章主要介紹了java 反射調(diào)用Service導(dǎo)致Spring注入Dao失效的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08

