private void ensureCapa() {
int newSize = elements.length * 2;
elements = Arrays.copyOf(elements, newSize);
}
我在许多其他网站中找到了类似的方法,并了解了EnsureCapacity的功能.但我不明白为什么长度乘以2(elements.length * 2).是否有特定原因或是否因数据类型而异?
提前致谢.
解决方法:
由于几个原因,列表填满时的容量加倍.
正如@jheimbouch和@ user3437460所说的那样,它直观地说得有点道理.您希望以与当前列表大小成比例的数量增加它.每次在最后添加一些固定元素可能最终对于一个大胖子列表来说真的很糟糕.
总的来说它更有效率.如果你不清楚你的列表的大小(就像设计你自己的基于数组的列表类一般使用时),如果你每次加倍列表的大小,那么平均每个大量插入,每个插入将花费O(1)恒定时间(这称为分摊常数时间操作).
想一想,调整数组大小的成本是n.因此,我们唯一可以调整的是我们经常这样做的频率.我们越经常这样做,我们的数组与实际数据大小绑定得越紧密,因此我们消耗更少的内存.我们做的次数越少,我们就可以节省CPU周期.
简而言之,它在一般情况下在数学上是合理的,并且在内存消耗和处理时间之间取得了非常好的平衡.
标签:java,list
来源: https://codeday.me/bug/20190608/1201516.html