看过ArrayList源码的朋友有没有看到里面有个不常用的方法:
这方法是干嘛的呢?说白了就是瘦身用的。
下面演示一下:
public class Test {
public static void main(String[] args) {
// 注意:trimToSize()方法属于ArrayList
ArrayList<String> names = new ArrayList<>();
for (int i = 0; i < 10; i++) {
names.add("Tom" + i);
}
names.add("Jim");
names.trimToSize();
System.out.println(names);
}
}
接下来看看debug:
执行完for循环,此时显示集合容量是10,有的同学说使用IDEA进行debug没有显示elementData,操作如下设置即可:
接下来再添加一个元素:
此时集合容量变成了15,并且为null的元素不显示,来看一下ArrayList的扩容源码:
此时,oldCapacity = 10,1010(10)右移一位0101(5),newCapacity = 10 + 5 = 15;
之后调用trimToSize()方法,再看看debug内容:
这个时候集合的容量变成了11,也就是变成了集合的实际容量,动态增加的部分被删除了。
此方法的目的是为了节约内存空间设置的,相当于手动回收内存,对JAVA语言来说意义不大,了解即可。