Java ArrayList trimToSize()
方法 用于调整arraylist集合空间的大小。
语法
语法如下:public void trimToSize();
参数
无
返回值
没有返回值
内部实现
/**
* 将ArrayList的实际容量调整为实际元素总个数大小,原是数组容量大小
*/
public void trimToSize() {
// modCount用来记录修改次数,是父类AbstractList中的属性
modCount++;// 修改次数加1
// size是ArrayList中实际有的元素的个数;elementData.length是数组的长度
// 如果ArrayList中实际元素个数小于数组长度,那么就需要清除掉数组中空的元素,然后将数组长度设置为ArrayList中实际元素个数
if (size < elementData.length) {
// 又是一个三元表达式,判断ArrayList中是否没有元素,即0个元素,则将elementData设置为一个空数组
// 如果元素个数大于0,则调用Arrays.copyOf()方法重新生成一个长度为size的数组,然后赋给elementData
elementData = (size == 0) ? EMPTY_ELEMENTDATA : Arrays.copyOf(elementData, size);
}
}
为什么要调整
结合ArrayList源码解读,因为arraylist大小是动态的,每次当容量不够用的是否都会将动态数组增加为原来的1.5倍数,
所以,这个1.5倍的空间而并没有完全被使用,我们可以使用trimToSize()来动态调整数组的大小,去除预留多余的空间。
例子
import java.util.ArrayList;
import java.util.List;
public class ArrayListExampleTrimToSize{
public static void main(String[] args) {
ArrayList<String> arrayList = new ArrayList<>();
for (int i = 0; i < 10; i++) {
arrayList.add("yxjc_" + i);
}
arrayList.trimToSize();
System.out.println(arrayList);
}
}