Początkowa pojemność @ArrayList i wyjątek IndexOutOfBoundsException [duplikat]

To pytanie ma już odpowiedź tutaj:

Początkowy rozmiar ArrayList 14 odpowiedzi

Rozważ ten przykładowy kod:

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 jest inicjowany z początkową pojemnością 7, następnie następny wiersz próbuje dodać ciąg „Hello” w pozycji 5. Zgłasza to wyjątek IndexOutOfBoundsException:

Exception w wątku „main” java.lang.IndexOutOfBoundsException: Indeks: 5, Rozmiar: 0

Spojrzałem nato pytani o tym, co oznacza „początkowa pojemność” w kontekście ArrayList. Rozumiem, że ten konkretny konstruktor przydziela miejsce dla 7 elementów String i jeśli spróbujemy dodać 8 elementów do listy, będzie musiał przydzielić więcej miejsca.

Co ja nie rozumiem, dlaczego nie tworzy „pustej” listy o rozmiarze 7 z zerowymi wartościami w każdym indeksie, podobnie jak w przypadku deklaracjiString[] myArray = new String[7]. Pamiętam, że dowiedziałem się, że ArrayList jest implementacją dynamicznej tablicy w Javie, więc oczekiwałbym podobnego zachowania. Jeśli tak naprawdę nie mam miejsca na 7 ciągów, kiedy deklarujęnew ArrayList<String>(7), co się właściwie dzieje?

questionAnswers(3)

yourAnswerToTheQuestion