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?


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)


8
+1 za dołączenie linku do dokumentu Java, który jasno wyjaśnia, że ​​zamówienie.
Ogre Psalm33


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.


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.


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

-1

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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.