HashMap a HashSet

Anonim

Když se naučíte nový počítačový jazyk, jedna z prvních věcí, na které se obvykle ptáte, je, jak pracovat s velkými skupinami dat. Toto téma je často zahrnuto v tématu "Datové struktury". Pokud vykopáváte hlouběji, musíte přijít mezi různými datovými strukturami, jako jsou propojené seznamy, fronty, zásobníky a binární stromy. V Javě jsou tyto struktury součástí Java Collections Framework. Sbírka není nic jiného než typ datové struktury, která odkazuje na seskupování více datových prvků a Java Collections Framework standardizuje způsob, jakým jsou tyto skupiny objektů zpracovávány. Ve skutečnosti byl kolektivní rámec navržen tak, aby splňoval několik cílů.

Celý rámec kolekcí je navržen kolem sady standardních rozhraní. Několik standardních implementací, jako jsou například LinkedList, HashSet a TreeSet, je poskytováno těmito rozhraními. Navíc můžete také vybrat svou vlastní kolekci. Kromě sbírek však rámec definuje několik mapových rozhraní a tříd. Java obsahuje tři obecné implementace map - HashMap, TreeMap a LinkedHashMap - které ukládají páry klíč / hodnota. Přestože mapy nejsou technicky sbírky, jsou plně integrovány do sbírek. Ve skutečnosti se mapy zaměřují na skupiny sdružování mezi objekty. Tento článek shrnuje klíčové rozdíly mezi HashMap a HashSet.

Co je HashMap?

HashMap je nejčastěji používaná implementace rozhraní Map, která poskytuje základní mapu klíče / hodnoty, kde nejsou prvky uspořádány. Používá speciální hodnotu nazvanou hash kód, místo pomalého vyhledávání klíče. Heslový kód je způsob, jak v daném objektu odebírat informace a přeměnit jej na "relativně unikátní" int pro daný objekt. Jedná se jednoduše o princip hašování, což znamená, že používá funkci hash pro mapování identifikačních hodnot. Stejně jako vektory Vector a Stack mají své náhrady v ArrayList a LinkedList, Hashtable má v HashMapu náhradu. Rozšiřuje funkci AbstractMap o implementaci rozhraní mapy pomocí interního reprezentace Hashtable. Stejně jako jiné implementace s obecným účelem, HashMap podporuje volitelné metody Map, umožňuje hodnoty null a není synchronizován.

Co je HashSet?

HashSet je jedním z členů Java Collections Framework, který implementuje rozhraní Set, podporované hash tabulkou, která je ve skutečnosti instancí HashMap. Jak název naznačuje, je implementován tabulkou hash, pole, ve kterém jsou prvky uloženy v pozici odvozené od jejich obsahu. Na rozdíl od mapy je Set přesně kolekce s přesně stejným rozhraním, takže neexistují žádné další funkce, jako je tomu u dvou různých seznamů. HashSet používá funkci hash, která je navržena speciálně pro rychlé vyhledání. Jedná se o neuspořádanou sbírku unikátních objektů, které nemohou ukládat duplicitní hodnoty. HashSet rozšiřuje třídu AbstractSet, která implementuje rozhraní Set. HashSet však nedefinuje žádné další metody kromě těch, které poskytuje její superclasses a rozhraní.

Rozdíl mezi HashMap a HashSet

  1. Základní

HashMap je nejčastěji používaná implementace rozhraní Map, která poskytuje základní mapu klíče / hodnoty, kde nejsou prvky uspořádány. Jedná se jednoduše o princip hašování, což znamená, že používá funkci hash pro mapování identifikačních hodnot. Na druhou stranu je HashSet jedním z členů Java Collections Framework, který implementuje rozhraní Set, podporované hash tabulkou, která je ve skutečnosti instancí HashMap. Jednoduše řečeno, HashMap implementuje rozhraní Mapu, zatímco HashSet implementuje rozhraní Set.

  1. Funkčnost

HashSet vytvoří sbírku, která používá ukládací tabulku hash. Hash tabulka ukládá informace pomocí metody nazvané hashing. HashSet používá funkci hash, která je speciálně navržena pro rychlé vyhledávání, ukládání prvků nebo hodnot. Většina funkcí HashSetu je poskytována prostřednictvím superslekce AbstractCollection a AbstractSet, kterou HashSet sdílí s TreeSet. HashMap rozšiřuje funkci AbstractMap pro implementaci rozhraní Map pomocí interní reprezentace Hashtable. Obě třídy nejsou synchronizovány, což znamená, že nejsou vhodné pro bezpečné závitové operace.

  1. Duplicitní hodnoty

Protože Map nepodporuje duplicitní klíče, HashMap nepovoluje duplicitní klíče, ale je povoleno mít duplicitní hodnoty. To znamená, že v HashMapu mohou existovat duplicitní hodnoty, ale můžete použít kolekci jako hodnotu proti některým klíčům. Každá klávesa musí být v HashMapu jedinečná a jediný klíč nemůže mít více než jednu hodnotu. HashSet na druhou stranu nemůže mít duplicitní prvky pouhou definicí Sady, což znamená, že v HashSetu nelze ukládat duplicitní hodnoty. HashMap povoluje pouze jeden nulový klíč, ale umožňuje libovolný počet nulových hodnot, zatímco HashSet umožňuje pouze jednu nulovou hodnotu.

  1. Ukládání mechanismu

HashMap pracuje na hashovém principu, což znamená, že používá hashovou funkci k mapování identifikace hodnot interně pomocí hashovacího algoritmu, který umožňuje snadné vyhledání. Pravý hashovací mechanismus vždy vrací stejný hashCode () při použití na stejný objekt. HashSet naopak vnitřní používá HashMap jako datovou strukturu pro přidávání nebo ukládání objektů. To znamená, že při vytvoření objektu HashSet vytvoří objekt HashMap.

HashMap vs. HashSet: Srovnávací graf

Shrnutí HashMap Vs. HashSet

Ačkoli HashMap a HashSet nejsou synchronizovány, což znamená, že nejsou vhodné pro bezpečné závitové operace a jsou zcela odlišné konstrukce, poskytují konstantní časovou náročnost pro základní operace, jako je přidávání, odstraňování prvků atd. Zatímco HashMap je obecně implementace rozhraní rozhraní Map, ve kterém jsou uloženy páry klíče / hodnot, je HashSet implementací rozhraní Set. HashSet používá HashMap k podpoře jeho implementace. HashMap však používá princip hašování a využívá ho k rychlé honbě klíče.