HashMap a LinkedHashMap

Anonim

HashMap a LinkedHashMap jsou dvě z nejběžnějších a univerzálních implementací Map v platformě Java. Jsou to v podstatě třídy založené na hash, které jsou navzájem podobné a používají se k vytváření mapy. Rozhraní Mapy je poslední z hlavních kolekčních rámcových rozhraní, které definuje operace, které jsou podporovány sadou sdružení klíč-hodnota, ve které jsou klíče jedinečné. Tyto implementace Mapy jsou založeny na algoritmu šachetování. Zatímco třída HashMap implementuje neuspořádané mapy, třída LinkedHashMap implementuje uspořádané mapy. Implementace LinkedHashMap je podtřída třídy HashMap, což znamená, že dědí vlastnosti třídy HashMap. Mezi oběma z hlediska výkonnosti není velký rozdíl. Podívejme se na to.

Co je HashMap?

HashMap je jednou z nejběžnějších a mezi čtyřmi univerzálními implementacemi rozhraní Map v jazyce Java založených na hašovací algoritmu. Je to analogické s nastavenou třídou HashSet, i když jsou prvky v obou třídách neuspořádané. Je implementován jako hash tabulka, ale na rozdíl od LinkedHashMap, neudržuje žádnou objednávku na klíče nebo hodnoty. Obecně platí, že HashMap poskytuje konstantní výkon pro putování a získávání. Třída není bezpečné pro vlákno, ale umožňuje jeden nulový klíč a několik nulových hodnot. Vzhledem k tomu, že si nevyžaduje opakující se pořadí, vyžaduje méně paměti.

Co je to LinkedHashMap?

LinkedHashMap patří mezi čtyři univerzální implementace rozhraní Map, která je podtřída třídy HashMap, což znamená, že dědí její vlastnosti. Přestože se jedná o velmi podobný HashMap z hlediska výkonu, s výjimkou toho, že udržuje pořadí vkládání klíčů, a to buď v pořadí, ve kterém jsou klíče vloženy do mapy, nebo pořadí, ve kterém jsou položky přístupné na mapě. Upravuje smlouvu své mateřské třídy tím, že zaručuje pořadí, v němž iterátory vrací své prvky. Vyžaduje však více paměti než HashMap, protože udržuje dvojitě propojený seznam v Javě.

Rozdíl mezi HashMap a LinkedHashMap

  1. Základy HashMap Vs. LinkedHashMap

HashMap je implementace mapového rozhraní v Javě na základě hash. Mapy jsou sbírka dvojic klíč-hodnota a používají se, když jsou seznamy v uspořádané sbírce. HashMap je třída Collection, která ukládá hodnotu v párech klíč-hodnota. Jednoduše řečeno, mapuje klíče na hodnoty, což znamená, že může najít hodnotu založenou na klíči. LinkedHashMap je implementace propojeného seznamu rozhraní Mapu stejně jako HashMap, s výjimkou toho, že udržuje objednávky prvků vložených do něj. Jedná se o podtřídu HashMap, která dědí její vlastnosti. LinkedHashMap upravuje smlouvu své mateřské třídy, HashMap, tím, že zaručuje pořadí, ve kterém iterátory vrací své prvky.

  1. Iterace Order

Klíčový rozdíl mezi HashMap a LinkedHashMap je objednávka. Prvky HashMapu nejsou v pořádku, zcela náhodné, zatímco prvky LinkedHashMap jsou uspořádány. Položky LinkedHashMap jsou v pořadí vložení 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 vypsán jako první, stejně jako hodnota přidružená k této kartě a poslední položka vložená do posledního výčtu. LinkedHashMap má předvídatelnou objednávku iterací, což znamená, že může také udržovat své prvky v přístupovém pořadí, což je pořadí, v němž jsou položky přístupné.

  1. Implementace

Třídy HashMap i LinkedHashMap používají hash pro implementaci mapového rozhraní v Javě, s výjimkou, že HashMap je implementován jako hash tabulka, zatímco LinkedHashMap udržuje dvojitě propojený seznam Buckets spuštěných všemi jeho záznamy. Proto LinkedHashMap vyžaduje 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 vznikly dodatečné náklady, které by jinak vznikly s TreeMap. Vedle toho je třída LinkedHashMap velmi podobná třídě HashMap v mnoha aspektech, jako jsou synchronizace a nulové klíče / hodnoty, protože obě umožňují jeden nulový klíč a několik nulových hodnot.

  1. Výkonnost pro HashMap Vs. LinkedHashMap

Ačkoli oba třídy poskytují srovnatelný výkon, předpokládá se, že třída HashMap je preferovanou volbou, pokud objednávání není problém, protože nezaručuje, pokud jde o iteraci pořadí mapy. Operace, jako je přidávání, odebírání nebo hledání položek založených na klíči, jsou konstantní, protože mají klíč. Takže přidávání, odebírání a hledání položek v LinkedHashMap může být mírně pomalejší než v HashMapu, protože udržuje dvojitě propojený seznam Buckets v jazyce Java. Navíc HashMap vyžaduje méně paměti než LinkedHashMap, protože není zachována žádná objednávka.

HashMap vs. LinkedHashMap: Srovnávací graf

Shrnutí HashMap Vs. LinkedHashMap

Zatímco třídy HashMap a HashMap mají téměř stejný výkon, HashMap vyžaduje méně paměti než LinkedHashMap, protože nezaručuje řidičský pořadí mapy, což znamená, že přidávání, odstraňování a vyhledávání položek v HashMapu je poměrně rychlejší než dělat to samé s LinkedHashMap. Hlavním rozdílem mezi těmito dvěma je však pořadí: prvky HashMap nejsou v pořádku, zatímco prvky LinkedHashMap jsou ve výchozím nastavení 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 přístupovém pořadí, což znamená pořadí, ve kterém jsou přístupné položky.Stejně jako u LinkedHashMap musí být zachován seznam s dvojitou vazbou, má méně výkonu než HashMap.