Cat*_*ysm 3 java performance arraylist
我可以在动态arrayList中使用ArrayList.trimToSize()方法吗?
提前致谢.
从您自己链接的文档:
将此ArrayList实例的容量调整为列表的当前大小.应用程序可以使用此操作来最小化ArrayList实例的存储.
在内部ArrayList存储一个包含所有项目的数组.在某些时刻,ArrayList将通过将所有值复制到更大的数组中来"扩展"此数组.只要添加项目并且所需容量大于当前项目,就会发生这种情况.此时发生的是以下代码行:
int newCapacity = oldCapacity + (oldCapacity >> 1);
elementData = Arrays.copyOf(elementData, newCapacity);
Run Code Online (Sandbox Code Playgroud)
实质上,这将创建一个大小为当前大小1.5倍的新阵列.这个方法的作用是调整内部数组的大小,使其没有空的空间.
什么都不会发生,你可以看到.你不会丢失任何数据,它只是较小的后备阵列.将数据添加到arraylist将再次正常扩展阵列.
我认为你的意思是"正常" ArrayList.如果你使用它,你将减少使用的内存,但如果你仍然会在那之后添加数据也将是徒劳的.它对于小列表来说是无用的.如果您有ArrayList许多项目,并且您确定不再需要添加,那么您可以调用此方法来减少一些内存占用.
往上看.我不认为你很可能会使用它.
trimToSize() 来自消息来源:
public void trimToSize() {
modCount++;
int oldCapacity = elementData.length;
if (size < oldCapacity) {
elementData = Arrays.copyOf(elementData, size);
}
}
Run Code Online (Sandbox Code Playgroud)