361 Stimmen

Anfangsgröße für die ArrayList

Sie können die anfängliche Größe für eine ArrayList festlegen, indem Sie

ArrayList<Integer> arr=new ArrayList<Integer>(10);

Sie können jedoch nicht

arr.add(5, 10);

weil es eine Ausnahme außerhalb der Grenzen verursacht.

Was nützt es, eine Anfangsgröße festzulegen, wenn man nicht auf den zugewiesenen Platz zugreifen kann?

Die Additionsfunktion ist definiert als add(int index, Object element) Ich werde also nicht in den Index 10 aufgenommen.

511voto

NPE Punkte 462670

Sie verwechseln die Größe der Array-Liste mit ihrer Kapazität:

  • die Größe ist die Anzahl der Elemente in der Liste;
  • die Kapazität ist die Anzahl der Elemente, die die Liste potenziell aufnehmen kann, ohne ihre internen Strukturen neu zuzuordnen.

Wenn Sie anrufen new ArrayList<Integer>(10) setzen Sie den Anfangswert der Liste Kapazität und nicht seine Größe. Mit anderen Worten, wenn die Array-Liste auf diese Weise konstruiert wird, ist sie zu Beginn ihres Lebens leer.

Eine Möglichkeit, der Array-Liste zehn Elemente hinzuzufügen, ist die Verwendung einer Schleife:

for (int i = 0; i < 10; i++) {
  arr.add(0);
}

Nun können Sie die Elemente mit den Indizes 0..9 ändern.

167voto

Wenn Sie eine Liste mit einer vordefinierten Größe wünschen, können Sie diese auch verwenden:

List<Integer> arr = Arrays.asList(new Integer[10]);

69voto

Farzan Skt Punkte 903

Wenn Sie Collections.fill(list, obj); verwenden möchten, um die Liste mit einem wiederholten Objekt zu füllen, können Sie alternativ

ArrayList<Integer> arr=new ArrayList<Integer>(Collections.nCopies(10, 0));

die Zeile kopiert 10 mal 0 in Ihre ArrayList

24voto

Natix Punkte 13576

Kapazität eines ArrayList ist nicht dasselbe wie sein Größe . Größe ist gleich der Anzahl der Elemente, die in der Datei ArrayList (und alle anderen List Umsetzung).

En Kapazität ist lediglich die Länge des zugrunde liegenden Arrays, das zur internen Speicherung der Elemente der ArrayList und ist immer größer oder gleich dem Größe der Liste.

Bei einem Anruf set(index, element) auf der Liste, die index bezieht sich auf die tatsächliche Anzahl der Listenelemente (=Größe) (die in Ihrem Code Null ist, weshalb die AIOOBE ausgelöst wird), nicht auf die Array-Länge (=Kapazität) (dies ist ein Implementierungsdetail, das für die ArrayList ).

En set Methode ist für alle List Implementierungen, wie zum Beispiel LinkedList die nicht durch ein Array, sondern durch eine verknüpfte Kette von Einträgen realisiert wird.

Editer : Sie verwenden die add(index, element) Methode, nicht set(index, element) aber das Prinzip ist hier das gleiche.

10voto

user3692587 Punkte 101

Wenn Sie die Elemente mit Index hinzufügen möchten, können Sie stattdessen ein Array verwenden.

    String [] test = new String[length];
    test[0] = "add";

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X