在填充之前将最后一个元素添加到ArrayList

时间:2013-10-01 13:52:02

标签: java arraylist

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());
}

我需要创建一个列表,然后添加最后一个元素,然后添加从开头到最后添加的第一个元素的所有元素。不,我最后无法添加它。这是正确的方式吗?

1 个答案:

答案 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);