Początkowa pojemność @ArrayList i wyjątek IndexOutOfBoundsException [duplikat]
To pytanie ma już odpowiedź tutaj:
Początkowy rozmiar ArrayList 14 odpowiedziRozważ 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?