La web de consultoriajava.com, la web de los auténticos expertos en Java

Ir a inicio

Declaración de objetivos

Contratación

Know-How Java

Know-How de Negocio

Cartas abiertas

Contactar


Servicios habituales

Análisis y Diseño

Aportación de Know-How

Arquitecto J2EE

Auditoria de Proyectos

Extreme Programming

Formación experta

Gestión de proyectos

Preparación de equipos

Refactoring de sistemas

Reingeniería de proyectos

Selección de personal


Ayuda para novatos

Artículos publicados

Ejemplos de código

English   Castellano

Know-How

ArrayList versus LinkedList



El problema:

En los proyectos en los que participamos solemos encontrar un uso y abuso de ArrayList frente a LinkedList, más de una vez nos hubiera gustado pensar que este criterio estaba motivado por razones técnicas pero lo cierto es que no era así en ningun caso.

La razon principal que diferentes desarrolladores esgrimieron para emplear un ArrayList era que representaba un "array" y eso era lo que ellos querian usar en la aplicación: una lista de objetos.

Al comentar la posibilidad de emplear el LinkedList la respuesta siempre era que "lo que necesitamos aqui es un array, no una lista enlazada".

Profundizando en este razonamiento descubrimos que la mayoría de desarrolladores venían de programar en C o en C++, algunos incluso venían de Visual Basic y tenían una clara tendencia hacia el uso de algo que se llamara "Array".

En algunos proyectos nos encontramos con un uso masivo de arrays tradicionales, los llamados "arreglos", que permiten implementar un array a la vieja usanza:

ClaseA listaObjetos[];

Perdiendo así el potencial de la Orientacion a Objetos.

La solución:

El ArrayList está pensado para realizar busquedas rapidas de información, el LinkedList no permite posicionarse de manera absoluta y por lo tanto no es conveniente para busquedas.

Por otro lado el LinkedList está pensado para realizar inserciones y eliminación de objetos situados al principio de la lista, funciona mucho más rapido que el ArrayList en inserciones, por ejemplo en la posicion 0, cuando el ArrayList es muy grande.

Que pasa si no se muy bien que hacer:

En ese caso es buena idea usar una interfaz que está implementada por ambas clases, la interfaz List y definir nuestros objetos de la siguiente forma:

// Si pensamos que tendremos muchas
// busquedas en listas grandes.
List listaObjetos = new ArrayList(); 


// Si pensamos que tendremos muchas
// inserciones y eliminaciones en listas grandes.
List listaObjetos = new LinkedList();

Una vez hecho esto podemos comprobar cuando tarda en ejecutarse nuestra aplicacion y en funcion de ello cambiar la declaracion de la lista de Objetos, puesto que al usar los mismos metodos, no necesitaremos cambiar el codigo de nuestra aplicacion.

Con cuidado:

Hay otras consideraciones que debemos tener en cuenta, no dudes en mirar la API para ver las particularidades de cada implementación.

Fuentes Uno Dos Tres Cuatro