A HashMap és a LinkedHashMap a Java platformon a leggyakoribb és általános célú térkép-megvalósítások. Alapvetően hash-alapú osztályok, nagyon hasonlóak egymáshoz, és egy térkép létrehozására használják. A Térkép interfész az utolsó a nagy gyűjtemény-keretrendszer interfészek közül, amely meghatározza azokat a műveleteket, amelyeket egy kulcs-érték asszociáció halmaza támogat, amelyben a kulcsok egyedi. Ezek a Térkép megvalósítások egy kivonatoló algoritmust tartalmaznak. Míg a HashMap osztály rendezetlen térképeket hajt végre, addig a LinkedHashMap osztály rendezett térképeket valósít meg. A LinkedHashMap megvalósítás a HashMap osztály alosztálya, ami azt jelenti, hogy örökli a HashMap osztály tulajdonságait. A teljesítmény szempontjából nincs nagy különbség a kettő között. Lássuk.
A HashMap az egyik leggyakoribb, és a Java felhasználói felület négy általános célú megvalósítása között, kivonási algoritmus alapján. Ez hasonló a beállított HashSet osztályhoz, bár az elemek mindkét osztályban rendezettek. Kivonat-táblázatként valósul meg, de a LinkedHashMap-del ellentétben nem tart fenn semmilyen sorrendet a kulcsokon vagy az értékeken. Általánosságban elmondható, hogy a HashMap állandó idejű teljesítményt nyújt az eladáshoz. Az osztály nem szálbiztos, de megenged egy null kulcsot és több null értéket. Mivel nem tart fenn iteráló sorrendet, kevesebb memóriát igényel.
A LinkedHashMap a Térkép interfész négy általános célú megvalósításának egyike, amely a HashMap osztály alosztálya, azaz örököli annak jellemzőit. Bár teljesítményében nagyon hasonlít a HashMap-ra, kivéve, ha fenntartja a kulcsok beillesztési sorrendjét, akár a kulcsok beillesztésének sorrendjében, akár a bejegyzéshez való hozzáférés sorrendjében. Finomítja szülőosztályának szerződését azáltal, hogy garantálja az iterátorok visszaadási elemeit. Ehhez azonban több memóriára van szüksége, mint egy HashMap-hez, mert fenntartja a kétszeresen összekapcsolt listát a Java-ban.
A HashMap a Map interfész kivonat alapú megvalósítása Java-ban. A térképek kulcs-érték párok gyűjteménye, és akkor használják, amikor a listák rendezett gyűjteményben vannak. A HashMap egy Gyűjtemény osztály, amely az értéket kulcs-érték párokban tárolja. Egyszerűen fogalmazva a kulcsokat az értékekhez rendeli meg, ami azt jelenti, hogy egy kulcs alapján meg tudja találni az értéket. A LinkedHashMap a Térkép interfész összekapcsolt listájának megvalósítása, csakúgy, mint a HashMap, azzal a különbséggel, hogy fenntartja a beillesztett elemek sorrendjét. Ez a HashMap alosztálya, amely örököli annak jellemzőit. A LinkedHashMap finomítja szülőosztályának, a HashMap-nek a szerződését, garantálva azt, hogy az iteratorok visszaadják az elemeit.
A HashMap és a LinkedHashMap közötti különbség a rend. A HashMap elemei nem vannak rendben, teljesen véletlenszerűen, míg a LinkedHashMap elemei meg vannak rendezve. A LinkedHashMap bejegyzései kulcsbeillesztési sorrendben vannak, azaz a kulcsok beillesztési sorrendje a térképen. Ez azt jelenti, hogy a térképbe beillesztett első kulcsot felsorolják először, ugyanúgy, mint a hozzárendelt értéket, és az utolsó beillesztés a felsoroltként utoljára szerepel. A LinkedHashMap kiszámítható iterációs sorrenddel rendelkezik, ami azt jelenti, hogy elemeit hozzáférési sorrendben is fenntarthatja, amely a bejegyzések elérésének sorrendje..
Mind a HashMap, mind a LinkedHashMap osztályok hash-t használnak a Map interfész megvalósításához Java-ban, kivéve a HashMap kivonat-táblázatként történő megvalósítását, míg a LinkedHashMap kétszeresen összekapcsolt vödrök listáját tartja fenn az összes bejegyzésén keresztül. Ez az oka annak, hogy a LinkedHashMap több memóriát igényel, mint a HashMap, mivel a HashMap-kel ellentétben megrendelést tart fenn. Eltávolítja a HashMap kaotikus megrendelését anélkül, hogy felmerülne a pótlólagos költség, amely egyébként a TreeMap esetében merülne fel. Ezen felül a LinkedHashMap osztály sok szempontból nagyon hasonlít a HashMap osztályhoz, például szinkronizáláshoz és null kulcsokhoz / értékekhez, mivel mindkettő lehetővé teszi egy null kulcsot és több null értéket.
Bár mindkét osztály összehasonlítható teljesítményt nyújt, úgy vélik, hogy a HashMap osztály a legjobb választás, ha a megrendelés nem jelent problémát, mert nem garantálja a térkép iterációs sorrendjét. Az olyan műveletek, mint például a bejegyzés hozzáadása, eltávolítása vagy a kulcs alapján történő keresése állandó idő, mivel a kulcs kivonatában vannak. Tehát a bejegyzések hozzáadása, eltávolítása és megtalálása a LinkedHashMap-ban kissé lassabb lehet, mint a HashMap-ben, mivel fenntartja a Java vödörjeinek kétszeresen összekapcsolt listáját. Ezenkívül a HashMap kevesebb memóriát igényel, mint a LinkedHashMap, mivel nem tart fenn sorrendet.
Noha a HashMap és a HashMap osztályok teljesítménye szinte hasonló, a HashMap kevesebb memóriát igényel, mint a LinkedHashMap, mivel nem garantálja a térkép iterációs sorrendjét, ami viszonylag gyorsabban teszi lehetővé a HashMap bejegyzéseinek hozzáadását, eltávolítását és megtalálását, mint ugyanazzal a művelettel. egy LinkedHashMap. A kulcskülönbség azonban a kettő között a sorrend: a HashMap elemei nincsenek rendben, míg a LinkedHashMap elemei alapértelmezés szerint kulcsbeillesztési sorrendben vannak, vagyis a kulcsok beillesztési sorrendje a térképen. A LinkedHashMap elemei hozzáférési sorrendben is fenntarthatók, azaz a bejegyzések elérésének sorrendjében. Mint a LinkedHashMap esetében, a kétszeresen összekapcsolt listát is fenn kell tartani, kevesebb teljesítménnyel rendelkezik, mint a HashMap.