¿Cuándo usar LinkedList<> sobre ArrayList<> en Java?


Quizás cuando uno es principante, se acostumbra a guardar arreglos de datos en objetos de la clase ArrayList usando List<String> Lista = new ArrayList<String>(); y muchas veces no se sabe los beneficios de usar la otra implementación de la interfáz List que es LinkedList que trabaja mediante usando un enlace doble de los elementos, es decir cada elemento se enlaza con el que esta "adelante" suyo y con el que está "atrás".

La clase LinkedList te permite realizar inserción y eliminaciones constantemente, pero solo un acceso secuencial a los elementos: Solo se puede iterar sobre la lista para adelante y para atrás, eso significa que acceder un elemento en el medio toma tiempo proporcionalmente al tamaño de la lista.
Por otro lado, los ArrayList permiten el acceso aleatorio en mayor medida, por lo que se puede acceder rápidamente a cualquier elemento a un tiempo constante, pero las inserciones y eliminaciones de cualquier lado (excepto al final) requiere mover todos los elementos, ya sea para hacer un hueco para el nuevo elemento o llenar un espacio dejado por uno que se eliminó. También si se añaden mas elementos que la capacidad del arreglo, uno nuevo con el doble de tamaño es creado, y el arreglo anterior es copiado al nuevo, con todo el tiempo de cómputo que eso significa en arreglos grandes.
Así que dependiendo de las operaciones que pretendas realizar deberás escoger las implementaciones. Iterar sobre cualquiera de las dos es prácticamente igual de "barato", técnicamente en un ArrayList es más rápido pero a menos de que realices algo realmente sensible a la eficiencia, no deberías preocuparte por eso.

No hay comentarios:

Publicar un comentario