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
|