次のサンプル コードを検討してください。
List<String> myList = new ArrayList<String>(7);
myList.add(5, "Hello");
myList.removeAll(Collections.singleton(null));
System.out.println(myList.size() + " objects:" );
for (String s : myList) {
System.out.println("\t" + s);
}
myList
は初期容量 7 で初期化され、次の行は文字列 "Hello" を位置 5 に追加しようとします。これにより、IndexOutOfBoundsException がスローされます。
スレッド「メイン」の例外 java.lang.IndexOutOfBoundsException: インデックス: 5、サイズ: 0
ArrayList に関して「初期容量」が何を意味するかについて、この質問を調べました。この特定のコンストラクターが 7 つの String 要素にスペースを割り当てていることを理解しています。リストに 8 つの要素を追加しようとすると、より多くのスペースを割り当てる必要があります。
私が理解していないのは、サイズ 7 の「空の」リストを作成せず、各インデックスに null 値を設定しない理由String[] myArray = new String[7]
です。ArrayList が Java の動的配列の実装であることを学んだことを思い出すので、同様の動作が予想されます。を宣言したときに割り当てられた 7 つの文字列のスペースが実際にない場合、実際にはnew ArrayList<String>(7)
何が起こっているのでしょうか?