ArrayList Vs LinkedList
Estaba siguiendo unPublicación anterio en esto que dice:
For LinkedList
get es O (n)add es O (1)remove es O (n) Iterator.remove es O (1)For ArrayList
get es O (1)add es O (1) amortizado, pero O (n) en el peor de los casos ya que la matriz debe ser redimensionada y copiadaremove es O (n)l mirar esto, llegué a la conclusión de que si tengo que hacer una inserción secuencial en mi colección, por ejemplo, 5000000 elementos,LinkedList
superará aArrayList
.
Y si solo tengo que recuperar los elementos de la colección iterando, es decir, sin agarrar el elemento en el medio, todavíaLinkedList
superará a `ArrayList.
Ahora para verificar mis dos declaraciones anteriores, escribí el siguiente programa de ejemplo ... Pero me sorprende que mis declaraciones anteriores se hayan demostrado incorrectas.
ArrayList
superadoLinkedlist
en ambos casos. Tomó menos tiempo queLinkedList
para agregar y recuperarlos de la Colección. ¿Hay algo que esté haciendo mal o las declaraciones iniciales sobreLinkedList
yArrayList
no es cierto para colecciones de tamaño 5000000?
Mencioné el tamaño, porque si reduzco el número de elementos a 50000,LinkedList
funciona mejor y las declaraciones iniciales son ciertas.
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) );