Einfügungs- und Abrufreihenfolge für ArrayList

88

Angenommen, ich füge 5 Zeichenfolgen in eine ein ArrayList. Wird die Reihenfolge des Einfügens und Abrufens aus ArrayListdem gleich sein?

Divinedragon
quelle
88
Es ist eine Sache, es einmal auszuprobieren. Es ist eine andere Sache, sicher zu sein, dass es jedes Mal das gleiche sein wird.
Suragch

Antworten:

80

Überprüfen Sie den folgenden Code und führen Sie ihn aus:

public class ListExample {

    public static void main(String[] args) {
        List<String> myList = new ArrayList<String>();
        myList.add("one");
        myList.add("two");
        myList.add("three");
        myList.add("four");
        myList.add("five");

        System.out.println("Inserted in 'order': ");
        printList(myList);
        System.out.println("\n");
        System.out.println("Inserted out of 'order': ");

        // Clear the list
        myList.clear();

        myList.add("four");
        myList.add("five");
        myList.add("one");
        myList.add("two");
        myList.add("three");

        printList(myList);
    }

    private static void printList(List<String> myList) {
        for (String string : myList) {
            System.out.println(string);
        }
    }
}

Erzeugt die folgende Ausgabe:

Inserted in 'order': 
one
two
three
four
five


Inserted out of 'order': 
four
five
one
two
three

Detaillierte Informationen finden Sie in der Dokumentation: List (Java Platform SE7)

axcdnt
quelle
7
+1 für das Einfügen eines Links zum Java-Dokument, der die Bestellung klar erklärt.
Oger Psalm33
20
Beispielausgabe wäre nützlich
nilesh
1
Exzellentes Beispiel. +1 dafür.
Pawan Tiwari
122

Ja . ArrayList ist eine sequentielle Liste . Die Reihenfolge beim Einfügen und Abrufen ist also dieselbe.

Wenn Sie während des Abrufs Elemente hinzufügen , bleibt die Reihenfolge nicht gleich.

Kalai Selvan Ravi
quelle
1
Wenn das OP am Ende "einfügt", wird dies auch als Hinzufügen bezeichnet.
Peter Lawrey
2
Die zweite Anweisung bedeutet, dass während des Abrufs durch einen Thread ein anderer Thread eingreift, um ein neues Element hinzuzufügen. dann bleibt die Reihenfolge nicht gleich
xpioneer
38

Wenn Sie immer am Ende hinzufügen, wird jedes Element am Ende hinzugefügt und bleibt so, bis Sie es ändern.

Wenn Sie immer am Anfang einfügen, wird jedes Element in der umgekehrten Reihenfolge angezeigt, in der Sie es hinzugefügt haben.

Wenn Sie sie in die Mitte einfügen, ist die Reihenfolge etwas anderes.

Peter Lawrey
quelle
12

Ja, es wird immer das gleiche sein. Aus der Dokumentation

Hängt das angegebene Element an das Ende dieser Liste an. Parameter: e Element, das an diese Liste angehängt werden soll Rückgabe: true (wie von Collection.add (java.lang.Object) angegeben)

ArrayList- add()Implementierung

public boolean More ...add(E e) {
    ensureCapacity(size + 1);  // Increments modCount!!
    elementData[size++] = e;
    return true;
}
Eduardo Dennis
quelle
-1

Ja, es bleibt gleich. aber warum nicht einfach testen? Erstellen Sie eine ArrayList, füllen Sie sie aus und rufen Sie die Elemente ab!

Mehsah Yhook
quelle
19
Das ist jedoch kein Beweis.
YoTengoUnLCD
1
Die gleiche Reihenfolge ist nur eines der möglichen Testergebnisse. Wenn die Implementierung eine Blackbox ist, kann dieselbe Reihenfolge ein spezifischer Fall sein. Beispiel ist sortierte Liste. Wenn Sie Elemente in der richtigen Reihenfolge zur sortierten Liste hinzufügen, können Sie sie in sortierter Reihenfolge abrufen (was nur ein besonderer Fall ist). Wenn Sie sie jedoch in zufälliger Reihenfolge hinzufügen, werden sie sortiert. Wenn Sie ArrayList testen, ohne die Implementierung zu überprüfen, wird nur "höchstwahrscheinlich die gleiche Reihenfolge" angegeben.
Simar