Inserimento di ArrayList e ordine di recupero


90

Supponiamo che io inserisca 5 stringhe in un file ArrayList. L'ordine di inserimento e recupero dal sito ArrayListsarà lo stesso?


90
Una cosa è provarlo una volta. Un altro è essere sicuri che sarà lo stesso ogni volta.
Suragch

Risposte:


85

Sì, ArrayList è una raccolta ordinata e mantiene l'ordine di inserzione.

Controlla il codice sottostante ed eseguilo:

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

Produce il seguente output:

Inserted in 'order': 
one
two
three
four
five


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

Per informazioni dettagliate, fare riferimento alla documentazione: List (Java Platform SE7)


9
+1 per aver incluso un collegamento al documento Java che spiega chiaramente che l'ordinamento.
Salmo dell'orco33

21
L'output di esempio sarebbe utile
nilesh

1
Ottimo esempio. +1 per questo.
Pawan Tiwari

Un esempio non è una prova, ma il collegamento è
yoni

124

. ArrayList è un elenco sequenziale . Quindi, l'ordine di inserimento e recupero è lo stesso.

Se aggiungi elementi durante il recupero , l'ordine non rimarrà lo stesso.


1
Se l'OP "inserisce" alla fine, si chiama anche aggiunta.
Peter Lawrey

2
la seconda istruzione significa che se durante il tempo di recupero da parte di un thread interviene un altro thread per aggiungere un nuovo elemento. quindi l'ordine non rimane lo stesso
xpioneer

38

Se aggiungi sempre alla fine, ogni elemento verrà aggiunto alla fine e rimarrà tale finché non lo modifichi.

Se inserisci sempre all'inizio, ogni elemento apparirà nell'ordine inverso in cui li hai aggiunti.

Se li inserisci nel mezzo, l'ordine sarà qualcos'altro.


12

Sì, sarà sempre lo stesso. Dalla documentazione

Aggiunge l'elemento specificato alla fine di questo elenco. Parametri: l'elemento da aggiungere a questo elenco Restituisce: true (come specificato da Collection.add (java.lang.Object))

add()Implementazione di ArrayList

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

-1

Sì, rimane lo stesso. ma perché non provarlo facilmente? Crea un ArrayList, riempilo e poi recupera gli elementi!


20
Non è una prova però.
YoTengoUnLCD

1
Lo stesso ordine è solo uno dei possibili risultati del test. Se l'implementazione è blackbox, lo stesso ordine potrebbe essere un caso specifico. L'esempio è un elenco ordinato. Se aggiungi elementi all'elenco ordinato nell'ordine corretto, puoi ottenerli in ordine ordinato (che è solo un caso particolare), ma se li aggiungi in ordine casuale li ottieni ordinati. Testare ArrayList senza verificare l'implementazione indicherà semplicemente "molto probabilmente l'ordine è lo stesso".
simar
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.