Rámec Java zbierky poskytuje sadu tried zbierok. Každá trieda má svoje silné a slabé stránky. Niektoré triedy poskytujú úplné implementácie, ktoré je možné použiť tak, ako sú. Ostatné sú abstraktné, ktoré poskytujú kostrové implementácie, ktoré sa používajú ako východiskové body pre vytváranie kolekcií. Implementácie kolekcie používajú rámec synchronizovaných wrapperov na zabezpečenie synchronizovaných tried, inak sú implementácie nesynchronizované. Niekoľko tried poskytuje implementáciu mapového rozhrania.
Platforma Java obsahuje tri implementácie máp na všeobecné použitie: HashMap, TreeMap a LinkedHashMap. HashMap a Hashtable sú dve kolekcie v Java, ktoré sa používajú na ukladanie párov kľúč / hodnota v hašovacej tabuľke. Hashtable je synchronizovaná mapa a HashMap je nesynchronizovaná mapa. Ak však potrebujete použiť synchronizovanú mapu, je tabuľka Hashtable rýchlejšia ako použitie súboru HashMap v synchronizovanom obale. Obe sú zbierky založené na algoritme hash v jazyku Java, majú však spravodlivý podiel na rozdieloch. Zdôrazňujeme niektoré kľúčové rozdiely medzi nimi, aby ste lepšie porozumeli podmienkam.
HashMap je implementácia máp založená na hašovacej tabuľke, ktorá poskytuje výkon v konštantnom čase na vkladanie a lokalizáciu párov. Trieda HashMap poskytuje implementáciu mapy, ktorá je založená na dátovej štruktúre Hashtable. Táto implementácia podporuje všetky operácie s mapami a umožňuje viac nulových hodnôt, ale iba jeden nulový kľúč. Na uloženie hodnôt do tabuľky hash používa páry kľúč / hodnota. Je to nesynchronizovaná mapa, čo znamená, že nie je bezpečná pre vlákna a nemôže byť zdieľaná medzi viacerými vláknami bez riadnej synchronizácie..
Na rozdiel od HashMap je Hashtable synchronizovaná mapa a je bezpečná pre vlákna, čo znamená, že ju možno zdieľať medzi viacerými vláknami. V Hashtable zadáte objekt, ktorý sa dá použiť ako kľúč, a hodnotu, ktorá sa s ním pohybuje. Hashtable mapuje tlačidlá na hodnoty pomocou hashovacej funkcie. Java poskytuje túto funkciu vo forme metódy hashcode () objektu, ktorú triedy prepíšu, aby poskytli príslušné hash kódy. Na rozdiel od HashMap, Hashtable nepodporuje nulové hodnoty a nulové kľúče, pretože v implementácii metódy put Hashtable je nulová kontrola.
Obidva sú kolekcie založené na hašiši v Java, ktoré sa používajú na ukladanie údajov vo dvojiciach kľúč / hodnota. HashMap je implementácia máp založená na hašovacej tabuľke, ktorá poskytuje výkon v konštantnom čase na vkladanie a lokalizáciu párov. Výkon je možné upraviť pomocou konštruktorov, ktoré vám umožňujú nastaviť kapacitu a faktor zaťaženia tabuľky hash. Základný Hashtable je veľmi podobný HashMapu, dokonca aj nad názvami metód. Uloží pár kľúč / hodnota do hašovacej tabuľky. V Hashtable zadáte objekt, ktorý sa dá použiť ako kľúč, a hodnotu, ktorá sa s ním pohybuje.
HashMap aj Hashtable používajú hashovacie techniky na ukladanie hodnôt na základe kľúča. Rovnako ako HashMap, aj Hashtable používa páry kľúč / hodnota na ukladanie hodnôt do tabuľky hash. Kľúčový rozdiel medzi nimi je však synchronizácia. HashMap je nesynchronizovaná mapa, zatiaľ čo Hashtable je synchronizovaná mapa. To znamená, že HashMap nie je bezpečný pre vlákna a nemôže byť zdieľaný medzi viacerými vláknami bez správneho synchronizačného kódu. Naopak, Hashtable je bezpečný pre vlákna a môže byť zdieľaný medzi viacerými vláknami. Hashtable je rýchlejšia ako použitie HashMap v synchronizovanom obale, ak potrebujete použiť synchronizovanú mapu.
Trieda HashMap poskytuje implementáciu mapy, ktorá je založená na dátovej štruktúre Hashtable. Táto implementácia podporuje všetky operácie s mapami a povoľuje viac nulových hodnôt, ale iba jeden nulový kľúč, aby mohla zachovať jedinečné vlastnosti kľúča. Neposkytuje však žiadne záruky týkajúce sa poradia, v ktorom sú záznamy uložené. Hashtable na druhej strane mapuje kľúče na hodnoty pomocou hashovacej funkcie. Na rozdiel od HashMap, Hashtable nepodporuje nulové hodnoty a nulové kľúče, pretože v implementácii metódy put Hashtable je nulová kontrola.
Pretože HashMap nie je synchronizovaná mapa, je z hľadiska výkonu oveľa rýchlejšia a lepšia ako hashtable a v skutočnosti využíva menej pamäte ako hashtable. Aj keď sú prakticky identické, Hashtable je o niečo pomalší ako HashMap, ale rýchlejší ako synchronizovaný HashMap. Vo svojej podstate nie je bezpečné používať hashable s viacvláknovým prístupom, pretože sú synchronizované iba metódy. Hashtable je synchronizovaný náprotivok k HashMap. Nesynchronizované objekty majú lepšiu výkonnosť v porovnaní so synchronizovanými objektmi, rovnako ako funkcia Hashtable funguje lepšie v prostredí s jedným vláknom..
Trieda HashMap vám dáva netriedenú, neusporiadanú mapu. Ak teda potrebujete mapu a nestaráte sa o poradie, v ktorom sú uložené, potom je HashMap spôsob, ako ísť.
Hashtable, rovnako ako Vector, pochádza z pravekej doby Java. Rovnako ako Vector je synchronizovaný náprotivok k modernejšiemu a pokročilejšiemu ArrayList, Hashtable je synchronizovaný náprotivok k HashMap. Trieda však nemôže byť synchronizovaná, takže keď hovoríme, že Hashtable je synchronizovaná mapa, znamená to, že kľúčové metódy triedy sú synchronizované.
Aj keď sú obe verzie prakticky identické, rozdiel spočíva v tom, ako sú synchronizované a ako fungujú. HashMap pracuje lepšie v prostredí s viacerými vláknami, zatiaľ čo Hashtable funguje lepšie v prostredí s jedným vláknom.