Hola Santiago, cómo estás?
Gracias por compartir tu duda en el foro.
Un ArrayList es una matriz dinámica que nos permite almacenar datos e incrementa su tamaño de acuerdo a la necesidad de forma automática, en ella podemos agregar, borrar y buscar elementos accediendo a ellos por su número de índice.
Un LinkedList es una lista enlazada de elementos, similar al ArrayList, pero a diferencia de este que guarda los datos en una matriz, LinkedList lo hace de manera lineal almacenando la información en posiciones de memoria que no son contiguas y en elementos nodo, donde cada elemento contiene datos y un puntero direccionado a uno de sus elementos vecinos o a ambos (hacia atrás y hacia adelante), de esta forma se elimina la necesidad de ordenar los elementos en la memoria.
ArrayList y LinkedList implementan la interface List del paquete java.util y por lo tanto tendrán los métodos propios de esta interface y que son comunes a todas las implementaciones.
Veamos las diferencias:
LinkedList:
- Se pueden agregar elementos indefinidamente
- Eliminar elementos es más eficaz, no deja espacios vacíos
- Solo acceso secuencial de los elementos, por lo tanto es más lento
- Utiliza más almacenamiento de memoria en la computadora, ya que no solo contiene el dato, sino también la dirección del próximo nodo
- Debe usarse en listas grandes, donde la totalidad de elementos y su contenido se desconoce.
ArrayList:
- Una vez llena la matriz, debe incrementarse su tamaño
- Al eliminar un elemento, se borra el contenido, pero el espacio de memoria queda ocupado y no puede usarse nuevamente
- Acceso aleatorio a los datos por medio de su índice, así el acceso es más rápido
- El espacio que ocupa en memoria es más reducido, porque contiene menos información
- Debe usarse para pequeñas listas, donde se conocen sus elementos
Ahora cuando usar una y cuando usar otra, bueno veamos:
Ambas clases tienen ventajas y desventajas dependiendo del uso que le daremos a la lista.
Si necesitamos acceder a elementos aleatorios o introducir nuevos elementos en posiciones específicas un ArrayList es lo más conveniente por su acceso por índices.
Si el uso más importante del array dinámico es la inserción en la primera o última posición de la lista y eliminación de uno o varios elementos, LinkedList es mucho más veloz y utiliza menos recursos del sistema.
Por el contrario, una particular desventaja de ArrayList, es que la eliminación de un elemento de la matriz borra el contenido, pero la posición queda vacía y no puede volver a utilizarse, esto no sucede con las listas enlazadas, la posición vacía vuelve a llenarse con un nuevo dato.
En cuanto a búsqueda es más veloz un ArrayList, porque lo hace a través del índice del elemento, mientras que LinkedList, debe hacerlo de forma lineal, recorriendo uno a uno los nodos hasta hallar el elemento deseado.
En caso de desconocer el tipo de operación que tendrá la lista, será más adecuado utilizar un ArrayList.
Por último para indagar y profundizar sobre la JVM lo mejor es leer la documentación oficial, te adjunto el link.
Link: https://docs.oracle.com/javase/specs/jvms/se8/html/
Espero haberte podido ayudar, saludos.
Si tienes alguna duda sobre el contenido de los cursos, estaremos aquí para ayudarte.
Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios