Aby powtórzyć listę połączoną, należy wykonać każdy odnośnik (link) w każdym elemencie. Odwołania te mogą wskazywać prawie wszędzie, nie ma gwarancji, że następny element podąża za bieżącym w pamięci, co jest złe dla buforowania. Ponieważ każda referencja musi zostać odzyskana, jest wolniejsza. Tablice są ciągłe w pamięci, a kolejnym elementem jest tylko położenie pamięci bieżącego elementu powiększone o wielkość elementu.
Dla listy podwójnie połączonej wstawianie w dowolnym miejscu tablicy jest bardzo szybkie, ponieważ tylko odniesienia do poprzedniego i następnego elementu muszą zostać zmienione. Z drugiej strony tablica jest wolniejsza, ponieważ wstawienie w dowolnym miejscu spowoduje skopiowanie całej tablicy w celu utworzenia miejsca dla nowego elementu. Nawet dołączenie elementu spowoduje również skopiowanie całej tablicy, gdy nie ma wystarczającej ilości pamięci ciągłej przydzielonej dla macierzy oraz nowo dodanego elementu.
Szczególnie zauważysz różnice w wstawianiu w przypadku dużych zbiorów danych. Niezależnie od tego, jak szybki może być arraycopy()
, lista podwójnie połączona jest zawsze szybsza do wstawienia. Ponieważ HashMaps są rzadko iterowane i polegają na wstawianiu i porządku, lista podwójnie połączona może dać temu wzrost wydajności.
+1 za zanotowanie pomijanych pustych wiader. Ponadto, LinkedHashMap zapewnia przewidywalne porządkowanie podczas iteracji poprzez Mapę (albo kolejność wstawiania, albo ostatnio dostępnego); kolejność iteratorów HashMap nie jest przewidywalna. –