Rozdíl mezi HashMap a LinkedHashMap

HashMap a LinkedHashMap jsou dvě z nejběžnějších implementací map na obecné úrovni v platformě Java. V zásadě se jedná o třídy založené na hašiši, velmi podobné sobě a používají se k vytvoření mapy. Rozhraní Map je poslední z hlavních rozhraní Framework Framework, které definuje operace, které jsou podporovány sadou asociací klíč-hodnota, ve kterých jsou klíče jedinečné. Tyto implementace map jsou založeny na algoritmu hashování. Zatímco třída HashMap implementuje neuspořádané mapy, třída LinkedHashMap implementuje objednané mapy. Implementace LinkedHashMap je podtřída třídy HashMap, což znamená, že zdědí vlastnosti třídy HashMap. Z hlediska výkonu není mezi nimi velký rozdíl. Podívejme se na to.

Co je HashMap? 

HashMap je jednou z nejčastějších a mezi čtyřmi univerzální implementací rozhraní Map v Javě založenou na hašovacím algoritmu. Je to analogické s nastavenou třídou HashSet, ačkoli prvky jsou v obou třídách neuspořádané. Je implementován jako hash tabulka, ale na rozdíl od LinkedHashMap neudržuje žádné pořadí klíčů nebo hodnot. Obecně poskytuje HashMap výkon v neustálém čase pro put and get. Třída není podprocesová, ale umožňuje jeden nulový klíč a více nulových hodnot. Protože neudržuje iterační pořadí, vyžaduje méně paměti.

Co je LinkedHashMap?

LinkedHashMap patří mezi čtyři univerzální implementace rozhraní Map, které je podtřídou třídy HashMap, což znamená, že zdědí své vlastnosti. Přestože je to z hlediska výkonu velmi podobné HashMapu, kromě toho, že zachovává pořadí vkládání klíčů, buď v pořadí, ve kterém jsou klíče vloženy do mapy, nebo v pořadí, ve kterém jsou přístupy k položkám v mapě. Zpřesňuje smlouvu své mateřské třídy tím, že zaručuje pořadí, ve kterém iterátoři vrací své prvky. Vyžaduje však více paměti než HashMap, protože udržuje v Java dvojitě propojený seznam.

Rozdíl mezi HashMap a LinkedHashMap

  1. Základy HashMap Vs. LinkedHashMap

HashMap je hašovací implementace rozhraní Map v Javě. Mapy jsou kolekce párů klíč-hodnota a používají se, když jsou seznamy v uspořádané sbírce. HashMap je třída Collection, která ukládá hodnotu do párů klíč-hodnota. Jednoduše řečeno, mapuje klíče na hodnoty, což znamená, že může najít hodnotu na základě klíče. LinkedHashMap je implementace propojeného seznamu rozhraní Map stejně jako HashMap s tím rozdílem, že udržuje pořadí prvků vložených do něj. Je to podtřída HashMap, která zdědí její vlastnosti. LinkedHashMap zpřesňuje smlouvu své nadřazené třídy, HashMap, tím, že garantuje pořadí, ve kterém iterátory vracejí své prvky.

  1. Iterační řád

Klíčovým rozdílem mezi HashMap a LinkedHashMap je řád. Prvky HashMap nejsou v pořádku, zcela náhodné, zatímco prvky LinkHashMap jsou uspořádány. Položky LinkedHashMap jsou v pořadí vkládání klíčů, což je pořadí, ve kterém jsou klíče vloženy do mapy. To znamená, že první klíč vložený do mapy je nejprve vyčíslen, stejně tak je přidružena hodnota a poslední položka vložena do vyčísleného posledního. LinkedHashMap má předvídatelné iterační pořadí, což znamená, že může také udržovat své prvky v pořadí přístupu, což je pořadí, ve kterém jsou položky přístupné.

  1. Implementace

Třídy HashMap i LinkedHashMap používají hashování k implementaci mapového rozhraní v Javě s tím rozdílem, že HashMap je implementován jako hash tabulka, zatímco LinkedHashMap udržuje dvojitě propojený seznam Bucketů, které procházejí všemi jeho položkami. Z tohoto důvodu vyžaduje LinkedHashMap více paměti než HashMap, protože na rozdíl od HashMap udržuje objednávku. Odstraňuje chaotické uspořádání HashMap, aniž by tím vznikly dodatečné náklady, které by jinak vznikly u TreeMap. Kromě toho je třída LinkedHashMap velmi podobná třídě HashMap v mnoha aspektech, jako je synchronizace a nulové klíče / hodnoty, protože obě umožňují nulovou i více nulových hodnot.

  1. Výkon pro HashMap Vs. LinkedHashMap

Přestože obě třídy poskytují srovnatelný výkon, třída HashMap je považována za preferovanou volbu, pokud objednávání není problém, protože nezaručuje opakovací pořadí mapy. Operace, jako je přidání, odebrání nebo nalezení záznamů na základě klíče, jsou konstantní čas, protože klíč hashují. Přidávání, odebírání a vyhledávání záznamů v LinkedHashMapu tedy může být o něco pomalejší než v HashMapu, protože v Javě udržuje dvojitě propojený seznam segmentů. Kromě toho vyžaduje HashMap méně paměti než LinkedHashMap, protože není udržován žádný řád.

HashMap vs. LinkedHashMap: Srovnávací tabulka

Shrnutí HashMap Vs. LinkedHashMap

I když jsou třídy HashMap i HashMap téměř podobné, HashMap vyžaduje méně paměti než spojenýHashMap, protože nezaručuje iterační pořadí mapy, což umožňuje přidávání, odebírání a vyhledávání položek v HashMap relativně rychleji než to samé s a LinkedHashMap. Klíčový rozdíl mezi nimi je však pořadí: prvky HashMap nejsou v pořádku, zatímco prvky LinkHashMap jsou ve výchozím pořadí v pořadí vkládání klíčů, což znamená pořadí, ve kterém jsou klíče vloženy do mapy. LinkedHashMap může také udržovat své prvky v pořadí přístupu, což znamená pořadí, ve kterém jsou položky přístupné. Stejně jako u LinkedHashMap musí být zachován dvojitě propojený seznam, který má nižší výkon než HashMap.