Amikor megtanul egy új számítógépes nyelvet, az egyik első kérdés, amelyet általában felteszel, hogy hogyan működik nagy adatcsoportokkal. Ezt a témát gyakran az „Adatszerkezetek” témakör tárgyalja. Ha mélyebben ás, akkor a sok egyéb adatszerkezet között olyan témákkal kell foglalkoznia, mint például a hivatkozott listák, sorok, kötegek és bináris fák. A Java-ban ezek a struktúrák a Java Collection Framework részét képezik. A gyűjtemény nem más, mint egy adatszerkezet, amely több adatelem csoportosítására utal, és a Java Gyűjtemények Kerete egységesíti ezen objektumcsoportok kezelésének módját. Valójában a gyűjteménygyűjteményt több cél elérésére tervezték.
A teljes gyűjteménykeret szabványos interfészek összessége alapján készült. Számos szabványos megvalósítás, például a LinkedList, a HashSet és a TreeSet, ezeket a felületeket biztosítja, amelyek Önnek lehetnek. Ezen felül saját gyűjteményét is megvalósíthatja, ha úgy dönt. A keretek mellett a keretek számos térkép interfészt és osztályt is meghatároznak. A Java három általános célú térkép-megvalósítást tartalmaz - HashMap, TreeMap és LinkedHashMap -, amelyek kulcs- és értékpárokat tárolnak. Noha a térképek műszakilag nem gyűjtemények, teljes mértékben integrálódtak a gyűjteményekbe. Valójában a térképek az objektumok közötti társulási csoportokra összpontosítanak. Ez a cikk összefoglalja a HashMap és a HashSet közötti legfontosabb különbségeket.
A HashMap a térkép interfész leggyakrabban használt megvalósítása, amely alapvető kulcs / érték térképet biztosít, ahol az elemek rendezettek. A kulcs lassú keresése helyett a hash-kódnak nevezett speciális értéket használja. A hash-kód arra szolgál, hogy információt szerezzen a kérdéses objektumban, és az objektum „viszonylag egyedi” intévé alakítsa. Ez egyszerűen a kivonatolás elvén működik, ami azt jelenti, hogy hash függvényt használ az azonosító értékek leképezésére. Csakúgy, mint a Vector és a Stack pótlása az ArrayList és a LinkedList között, a Hashtable helyettesíti a HashMap-t. Bővíti az AbstractMap-et a Térkép interfész belső Hashtable-ábrázolással történő megvalósításához. És hasonlóan más általános célú megvalósításokhoz, a HashMap támogatja a Map opcionális módszereit is, engedélyezi a null értékeket és nincs szinkronizálva.
A HashSet a Java Gyűjtemények keretrendszerének egyik tagja, amely a Set felületet valósítja meg. Ezt a hash táblát támogatja, amely valójában HashMap példány. Ahogy a neve is sugallja, azt egy hash table valósítja meg, egy olyan tömb segítségével, amelyben az elemeket a tartalmukból származtatott helyzetben tárolják. A térképtől eltérően a Set pontosan egy gyűjtemény, pontosan ugyanazzal a felülettel, tehát nincs különösebb funkció, mint például két különböző lista esetén. A HashSet olyan kivonási funkciót használ, amelyet kifejezetten a gyors kereséshez terveztek. Az egyedi objektumok rendezetlen gyűjteménye, amely nem képes tárolni az ismétlődő értékeket. A HashSet kiterjeszti az AbstractSet osztályt, amely a Set felületet valósítja meg. A HashSet azonban nem határoz meg semmilyen további módszert, kivéve a szuperosztályai és interfészei.
A HashMap a térkép interfész leggyakrabban használt megvalósítása, amely alapvető kulcs / érték térképet biztosít, ahol az elemek rendezettek. Ez egyszerűen a kivonatolás elvén működik, ami azt jelenti, hogy hash függvényt használ az azonosító értékek leképezésére. A HashSet viszont a Java Gyűjtemények keretrendszerének egyik tagja, amely a Set felületet valósítja meg, és egy hash tábla támogatja, amely valójában HashMap példány. Egyszerűen fogalmazva: a HashMap megvalósítja a Térkép felületet, míg a HashSet a Set felületet.
A HashSet olyan gyűjteményt hoz létre, amely tárolóhoz hash táblát használ. A hasábtábla az információkat hashizált módszerrel tárolja. A HashSet olyan kivonási funkciót használ, amelyet kifejezetten a gyors kereséshez terveztek az elemek vagy értékek tárolására. A HashSet funkciók nagy részét az AbstractCollection és az AbstractSet szuperosztály biztosítja, amelyet a HashSet megoszt a TreeSet-rel. A HashMap kiterjeszti az AbstractMap szolgáltatást a Térkép interfész megvalósításához belső Hashtable ábrázolással. Mindkét osztály nincs szinkronizálva, tehát nem alkalmas szál-biztonságos műveletekre.
Mivel a Térkép nem támogatja a másodpéldányos kulcsok használatát, a HashMap nem engedélyezi a kulcsmásolatokat, de megengedett, hogy ismétlődő értékek legyenek. Ez azt jelenti, hogy ismétlődő értékek létezhetnek a HashMap-ban, de a gyűjtemény felhasználható értékként néhány kulcs ellen. Mindegyik kulcsnak egyedinek kell lennie a HashMap-ben, és nem lehet megengedni, hogy egyetlen kulcs értéke egynél több legyen. A HashSet viszont nem rendelkezhet duplikált elemekkel pusztán a hal meghatározásával, azaz nem tárolhat duplikált értékeket a HashSet-ben. A HashMap csak egy null kulcsot engedélyezi, de tetszőleges számú null értéket engedélyez, míg a HashSet csak egy null értéket tesz lehetővé.
A HashMap a hash elven működik, ami azt jelenti, hogy hash függvényt használ a belső azonosító értékek feltérképezésére a hash algoritmus segítségével az egyszerű visszakeresés érdekében. Az igaz kivonási mechanizmus mindig ugyanazt a hashCode-t () adja vissza, amikor ugyanazon objektumra alkalmazzák. A HashSet viszont belsőleg használja a HashMap-et háttéradat-struktúrává objektumok hozzáadására vagy tárolására. Ez azt jelenti, hogy a HashSet objektumának létrehozásakor létrejön a HashMap objektuma.
Noha a HashMap és a HashSet nem szinkronizáltak, azaz nem alkalmasak szálbiztonsági műveletekre, és teljesen eltérő konstrukciók, állandó időteljesítményt nyújtanak az alapműveletekhez, például az elem hozzáadásához, eltávolításához stb. Míg a HashMap a a Térkép interfész, amely tárolja a kulcs / érték párokat, a HashSet a Set felület megvalósítása. A HashSet a HashMap használatával támogatja a megvalósítást. A HashMap azonban a hash elvet használja és használja azt a kulcs gyors vadászatához.