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());
}
リストを作成し、最後の要素を追加する必要があります。その後、最初に追加された最後の要素まで、最初からすべての要素を追加します。いいえ、結局追加できません。それは正しい方法ですか?
いいえ、絶対にうまくいきません。コンストラクター
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);