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?


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)


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.


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.


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

-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!


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.