lunes, 1 de enero de 2018

Diferencia entre ArrayList y LinkedList en Java


Este post lo podría haber hecho hace mucho pero bueno hace poco que me he dado cuenta que esto no es de conocimiento de todos los mortales programadores java.

Antes que nada aclaro que tanto ArrayList como LinkedList implementan la interfaz List y se encuentran en el paquete java.util y son parte de lo que se conoce como java collection framework o jcf para los amigos.

La principal diferencia es un tema de implementación ArrayList implementa la lista con arreglos linkeados, lo que la hace muy eficiente para recorrer pero ineficiente para insertar o eliminar elementos que se no encuentren en el final. En cambio LinkedList es una lista de elementos linkeados (en realidad es una lista doblemente enlazada) lo que la hace lenta para recorrer pero sumamente eficiente para insertar o eliminar elementos. Esta es la principal diferencia y hay que recordarla siempre.

Por lo tanto ArrayList :
  • usa internamente un arreglo dinámico para almacenar los elementos.
  • proporciona una manipulación lenta 
  • es la mejor opción para almacenar y acceder a datos o elementos consecutivos. 

Por lo tanto LinkedList:
  • proporciona una manipulación más rápida porque utiliza una lista doblemente enlazada.
  • se puede utilizar como lista y cola porque implementa interfaz de List, Deque y Queue.
  • es mejor para manipulación de elementos, es decir, para insertar y eliminar elementos.
Por lo tanto si necesitamos agregar elementos consecutivos y recorrerlos debemos utilizar ArrayList y si en cambio necesitamos insertar y eliminar valores no consecutivos debemos usar LinkedList.

Veamos un ejemplo de ArrayList:

import java.util.*;

public class Sample {

          public static void main(String args[]) {
               //Declaring ArrayList
               List<String> l = new ArrayList<String>();
               l.add("Apple");//inserting elements
               l.add("Orange");
               l.add("Mango");
               l.add("Banana");
               l.add("Guava");

               //Traverse the elements by using Iterator interface
               Iterator i = l.iterator();
               while(i.hasNext()) {
                    System.out.println(i.next());
               }
        }
}

Output: Apple
            Orange
            Mango
            Banana
            Guava



Veamos un ejemplo de LinkedList:

import java.util.*;

public class Demo {

    public static void main(String args[]) {
        //Declaring the LinkedList
        LinkedList<String> ll = new LinkedList<String>();
        ll.add("Red");
        ll.add("Red");
        ll.add("Black")';
        ll.add("Blue");
        ll.add("Pink");
        ll.add("Green");

        //Traversing elements by using Iterator interface
        Iterator i = ll.iterator();
        while(i.hasNext()) {
            System.out.println(i.next())
        }
    }
}

Output: Red
             Red
             Black
             Blue
             Pink
             Green

Dejo link: