Kolejność wstawiania i pobierania ArrayList

88

Załóżmy, że wstawiam 5 ciągów do pliku ArrayList. Czy kolejność wstawiania i pobierania z pliku ArrayListbędzie taka sama?

divinedragon
źródło
88
Jedną rzeczą jest wypróbowanie tego raz. Inną rzeczą jest mieć pewność, że za każdym razem będzie tak samo.
Suragch

Odpowiedzi:

82

Sprawdź poniższy kod i uruchom go:

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);
        }
    }
}

Daje następujący wynik:

Inserted in 'order': 
one
two
three
four
five


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

Szczegółowe informacje można znaleźć w dokumentacji: List (Java Platform SE7)

axcdnt
źródło
8
+1 za dołączenie linku do dokumentu Java, który jasno wyjaśnia, że ​​zamówienie.
Ogre Psalm33
20
Przydałby się
1
Doskonały przykład. +1 za to.
Pawan Tiwari
123

Tak . ArrayList to lista sekwencyjna . Tak więc kolejność wstawiania i pobierania jest taka sama.

Jeśli dodasz elementy podczas pobierania , kolejność nie pozostanie taka sama.

Kalai Selvan Ravi
źródło
1
Jeśli OP „wstawia” na końcu, nazywane również dodawaniem.
Peter Lawrey
2
druga instrukcja oznacza, że ​​w czasie pobierania przez jeden wątek inny wątek interweniuje, aby dodać nowy element. wtedy kolejność nie pozostaje taka sama
xpioneer
38

Jeśli zawsze dodajesz na końcu, każdy element zostanie dodany na końcu i pozostanie taki, dopóki go nie zmienisz.

Jeśli zawsze wstawiasz na początku, każdy element pojawi się w odwrotnej kolejności, w jakiej go dodałeś.

Jeśli wstawisz je na środku, kolejność będzie inna.

Peter Lawrey
źródło
12

Tak, zawsze będzie tak samo. Z dokumentacji

Dołącza określony element na końcu tej listy. Parametry: element, który ma zostać dołączony do tej listy Zwraca: true (jak określono w Collection.add (java.lang.Object))

add()Implementacja ArrayList

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

Tak, pozostaje to samo. ale dlaczego nie łatwo go przetestować? Utwórz ArrayList, wypełnij ją, a następnie pobierz elementy!

Mehsah Yhook
źródło
20
To jednak nie jest dowód.
YoTengoUnLCD
1
Ta sama kolejność to tylko jeden z możliwych wyników testu. Jeśli implementacja dotyczy czarnej skrzynki, ta sama kolejność może być specyficzna. Przykładem jest posortowana lista. Jeśli dodasz elementy do posortowanej listy w odpowiedniej kolejności, możesz je uzyskać w posortowanej kolejności (co jest tylko szczególnym przypadkiem), ale jeśli dodasz je w przypadkowej kolejności, otrzymasz je w kolejności. Testowanie tablicy ArrayList bez sprawdzania implementacji spowoduje po prostu informację „najprawdopodobniej kolejność jest taka sama”.
simar