Ordre d'insertion et d'extraction ArrayList

88

Supposons que j'insère 5 chaînes dans un fichier ArrayList. L'ordre d'insertion et de récupération à partir du ArrayListsera-t-il le même?

divinedragon
la source
88
C'est une chose de l'essayer une fois. C’est une autre d’être sûr que ce sera toujours la même chose.
Suragch

Réponses:

81

Vérifiez le code ci-dessous et exécutez-le:

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

Produit la sortie suivante:

Inserted in 'order': 
one
two
three
four
five


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

Pour des informations détaillées, veuillez consulter la documentation: List (Java Platform SE7)

axcdnt
la source
7
+1 pour avoir inclus un lien vers la doc Java qui explique clairement que la commande.
Ogre Psalm33
20
Un exemple de sortie serait utile
nilesh
1
Excellent exemple. +1 pour cela.
Pawan Tiwari
123

Oui . ArrayList est une liste séquentielle . Ainsi, l'ordre d'insertion et de récupération est le même.

Si vous ajoutez des éléments lors de la récupération , l'ordre ne restera pas le même.

Kalai Selvan Ravi
la source
1
Si l'OP "insère" à la fin, également appelé ajout.
Peter Lawrey
2
la deuxième instruction signifie si pendant le temps de récupération par un thread un autre thread intervient pour ajouter un nouvel élément. alors l'ordre ne reste pas le même
xpioneer
38

Si vous ajoutez toujours à la fin, chaque élément sera ajouté à la fin et le restera jusqu'à ce que vous le changiez.

Si vous insérez toujours au début, chaque élément apparaîtra dans l'ordre inverse dans lequel vous les avez ajoutés.

Si vous les insérez au milieu, la commande sera autre chose.

Peter Lawrey
la source
12

Oui, ce sera toujours la même chose. De la documentation

Ajoute l'élément spécifié à la fin de cette liste. Paramètres: élément à ajouter à cette liste Renvoie: true (comme spécifié par Collection.add (java.lang.Object))

ArrayList add()mise en œuvre

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

Oui, cela reste le même. mais pourquoi ne pas le tester facilement? Créez une ArrayList, remplissez-la puis récupérez les éléments!

Mehsah Yhook
la source
19
Ce n'est cependant pas une preuve.
YoTengoUnLCD
1
Le même ordre n'est qu'un des résultats possibles du test. Si la mise en œuvre est une boîte noire, le même ordre peut être un cas spécifique. L'exemple est une liste triée. Si vous ajoutez des éléments à la liste triée dans le bon ordre, vous pouvez les obtenir dans un ordre trié (ce qui n'est qu'un cas particulier), mais si vous les ajoutez dans un ordre aléatoire, vous les obtenez dans l'ordre. Tester ArrayList sans vérifier l'implémentation indiquera simplement "l'ordre est très probablement le même".
simar