Para iterar en una lista vinculada, debe seguir cada referencia (enlace) en cada elemento. Estas referencias pueden apuntar casi a cualquier parte, no hay garantía de que el siguiente elemento siga al actual en la memoria, lo que es malo para el almacenamiento en caché. Debido a que cada referencia debe recuperarse, es más lenta. Las matrices son continuas en la memoria y el siguiente elemento es solo la ubicación de la memoria del elemento actual incrementado con el tamaño del elemento.
Para una lista doblemente vinculada, la inserción en cualquier lugar de la matriz es muy rápida porque solo deben cambiarse las referencias del elemento anterior y siguiente. Una matriz, por otro lado, es más lenta porque la inserción en cualquier punto hará que toda la matriz se copie para dejar espacio para el nuevo elemento. Incluso si se agrega un elemento, también se copiará toda la matriz cuando no haya suficiente memoria continua asignada para la matriz más el elemento recién agregado.
Notará especialmente las diferencias de inserción al tratar con grandes conjuntos de datos. No importa qué tan rápido sea arraycopy()
, una lista doblemente enlazada siempre es más rápida para la inserción. Debido a que los HashMaps raramente se repiten y dependen de la inserción y el orden, una lista doblemente enlazada puede darle un aumento de rendimiento.
+1 para anotar los segmentos vacíos omitidos. Además, un LinkedHashMap proporciona un orden predecible al iterar a través del Mapa (ya sea inserción o el último pedido al que se accedió); un orden de iterador de HashMap no es predecible. –