La implementación interna de ArrayList y LinkedList es aproximadamente la siguiente
Tanto ArrayList como LinkedList implementan la interfaz List. La implementación de ArrayList utiliza matrices, mientras que LinkedList se basa en listas vinculadas y LinkedList es adecuado para agregar y eliminar.
La diferencia entre ArrayList y LinkList:
ArrayList es una interfaz de datos basada en índices con una matriz en la parte inferior. Permite el acceso aleatorio a elementos con complejidad temporal O(1).
Las operaciones de inserción, adición y eliminación son más rápidas con LinkedList que con ArrayList porque cuando se agrega un elemento a cualquier posición de la colección, no es necesario volver a calcular el tamaño ni actualizar el índice, ya que hay con matrices.
LinkedList consume más memoria que ArrayList porque LinkedList almacena dos referencias para cada nodo, una apunta al elemento anterior y la otra apunta al siguiente elemento.
Pero eliminar datos requiere reorganizar todos los datos en la matriz, lo que aumenta la sobrecarga.
2) La inserción de LinkedList es más rápida que ArrayList. Debido a que LinkedList es diferente de ArrayList, no necesita cambiar el tamaño de la matriz ni recargar todos los datos en una nueva matriz cuando la matriz está llena (este es el peor caso de ArrayList), por lo que su complejidad temporal es O(n), mientras que la complejidad temporal de insertar o eliminar datos en LinkedList es solo O(1). ArrayList también necesita actualizar el índice al insertar datos (excepto cuando se inserta al final de la matriz).
3) De manera similar a insertar datos, LinkedList también es mejor que ArrayList al eliminar datos.
4) LinkedList requiere más memoria porque cada posición de índice en ArrayList son datos reales, y cada nodo en LinkedList almacena los datos reales y las posiciones de sus nodos anteriores y siguientes (almacenamiento de instancia de LinkedList Dos valores: Nodo primero y Nodo último representan el nodo real y la posición del último nodo en la lista vinculada, respectivamente). El primer nodo y el último nodo representan el nodo real y el nodo de cola de la lista vinculada, respectivamente. Cada instancia de Nodo almacena tres valores: elemento E, Nodo siguiente, Nodo previo.
¿Cuál es la mejor solución para usar LinkedList en lugar de ArrayList?
1) Su aplicación no accederá a los datos de forma aleatoria. Porque si necesita el enésimo elemento en LinkedList, debe comenzar desde el primer elemento y contar hasta el enésimo dato, y luego leer los datos.
2) Su aplicación inserta y elimina elementos con más frecuencia y lee datos con menos frecuencia. Dado que insertar y eliminar elementos no implica reorganizar los datos, es más rápido que ArrayList.