当我执行以下代码时,输出为1
。为什么会这样?
import java.util.*;
class Output {
public static void main(String args[]) {
ArrayList obj = new ArrayList();
obj.add("A");
obj.ensureCapacity(3);
System.out.println(obj.size());
}
}
答案 0 :(得分:2)
size()
指的是实际位于List
中的元素数,而不是支持数组的大小。
public int size()
返回此列表中的元素数。
实施ArrayList
背后的想法是,你应该很少关心的确是的大小,你应该只关心它足够大(用ensureCapacity()
控制),而不是太大(用trimToSize()
控制)。但大多数情况下,您不需要知道或关心后备阵列的大小。
答案 1 :(得分:2)
size()
告诉你arraylist中元素的数量。另一方面,ensureCapacity(n)
你告诉arraylist你将至少有n
个元素。
Arraylist动态增长,假设它的初始容量为x
,一旦此容量即将结束,它会创建一个大小为2x
的新数组。如果这还要超过4x
。虽然将数组大小加倍会产生开销,但您必须复制所有元素。
但是在开始时,如果你知道你将至少有10x
个元素,那么你可以通过使用10x
让arraylist确保至少ensureCapacity(10x)
个容量这样你就可以避免所有的开销。