J'ai été à la suite d'un post précédent sur ce qui est dit:
For LinkedList
* get is O(n)
* add is O(1)
* remove is O(n)
* Iterator.remove is O(1)
For ArrayList
* get is O(1)
* add is O(1) amortized, but O(n) worst-case since the array must be resized and copied
* remove is O(n)
Donc, en regardant cela, j'en ai conclu que Si j'ai à faire, juste séquentielle insérer dans ma collection pour dire 5000000 élément, LinkedList surclassera ArrayList.
Et Si j'ai juste chercher les éléments de la collection par l'itération à-dire ne Pas l'accaparement de l'élément dans le milieu, encore LinkedList surclassera ArrayList.
Maintenant, pour vérifier mes deux rapports ci-dessus, j'ai écrit ci-dessous exemple de programme... Mais je suis surpris de voir que mon énoncés ci-dessus ont été révélées fausses.
Liste de tableaux surclasser Linkedlist dans les deux cas. Il a fallu moins de temps que LinkedList pour ajouter ainsi à la corvée de la Collecte. Est-ce que je fais mal, ou les déclarations initiales sur LinkedList et ArrayList n'est pas vrai pour les collections de taille 5000000?
Je l'ai mentionné taille, parce que si je réduire le nombre d'éléments à 50000, LinkedList de mieux performer et de la déclaration initiale est vrai.
long nano1 = System.nanoTime();
List<Integer> arr = new ArrayList();
for(int i=0;i<5000000;++i){
arr.add(i);
}
System.out.println( (System.nanoTime() - nano1) );
for(int j: arr){
;
}
System.out.println( (System.nanoTime() - nano1) );
long nano2 = System.nanoTime();
List<Integer> arrL = new LinkedList();
for(int i=0;i<5000000;++i){
arrL.add(i);
}
System.out.println( (System.nanoTime() - nano2) );
for(int j:arrL){
;
}
System.out.println( (System.nanoTime() - nano2) );