2

(ジェネリック型の) ArrayLists の ArrayList をインスタンス化したいと考えています。私はこのコードを持っています:

private ArrayList<ArrayList<GameObject>> toDoFlags;
toDoFlags = new ArrayList<ArrayList<GameObject>>(2);

私はこれを正しく行っていますか?コンパイルはできますが、ArrayList を見るとサイズが 0 になっています。

4

2 に答える 2

6

あなたはそれを正しくやっています。長さがゼロの理由は、まだ何も追加していないためです。

渡す「2」は、ArrayList をサポートする配列の初期容量です。しかし、 のsize()メソッドは、ArrayListバッキング配列の初期容量を返しません...リスト内の実際の要素の数を返します。

通常、このinitialCapacityパラメーターは使用しないでください。大きな ArrayList がある場合のパフォーマンスの最適化です。多くのスペースを明示的に割り当てることで、リストにアイテムを追加するたびに再割り当てにかかる時間を節約できます。しかし、この場合、おそらく非常に大きなリストはありません。

また、ArrayLists の ArrayList を使用する代わりに、データを格納するクラスを作成することを検討する必要があります。

于 2013-09-01T04:03:38.023 に答える
1

ArrayList は、追加すると展開されます。整数の容量引数は、バッキング配列の初期サイズを設定するだけです。容量を 2 に設定しても、ArrayList に 2 つの要素があるということではなく、より大きな内部配列を宣言する前に ArrayList に 2 つの要素を追加できるということです。

于 2013-09-01T04:04:34.653 に答える