final int k = 9;
final List<A> as = new ArrayList<A>(k + 1);
as.set(k, new A());
for (int i = 0; i < k; i++) {
as.add(new A());
}
我需要创建一个列表,然后添加最后一个元素,然后添加从开头到最后添加的第一个元素的所有元素。不,我最后无法添加它。这是正确的方式吗?
答案 0 :(得分:1)
不,它肯定不起作用。构造函数
new ArrayList<A>(k + 1)
仅告知结果列表<{>>容量 k + 1
。新列表仍然具有大小为0.因此下一个语句
as.set(k, new A());
将立即抛出IndexOutOfBoundsException。
如果我是你,我只是保存值并在最后添加它,假设new A()
调用有副作用,迫使你先填写最后一个元素(它本身就是一个坏主意):
final A lastA = new A();
for (int i = 0; i < k; i++) {
as.add(new A());
}
as.add(lastA);
或者,创建一个具有固定大小的数组,并将其转换为列表(请注意,结果不是ArrayList,无法调整大小):
final A[] aa = new A[k + 1];
aa[k] = new A();
for (int i = 0; i < k; ++ i) {
aa[i] = new A();
final List<A> as = Arrays.asList(aa);