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.