Java - a különbség a HashMap, LinkedHashMap és Treemap kód q - egy orosz (ru)

Mindhárom osztály végrehajtja a térkép felület, és kínál alapvetően ugyanazt a funkciót. A legfontosabb különbség az, hogy milyen sorrendben az iteráció a feljegyzések:

  • HashMap nem ad garanciát arra, hogy a sorrendben ismétléseket. Meg lehet (és lesz) lehet akár teljesen megváltozhat, ha új elemekkel.
  • Treemap hajtogat szerint „természetes rend” kulcsok módszer szerint compareTo () (vagy kívülről összehasonlító). Ezen kívül végrehajtja a felület SortedMap. amely módszereket, hogy függ ez a sorrend.
  • LinkedHashMap fog végighaladni a sorrendet, amelyben a bejegyzések kerültek a kártya

«Hash» - ez a közös neve hash térképeket. Az összefüggésben a Java API hash osztály elavult, mivel a Java 1.1 előtt volt egy gyűjtemény keretet. Ez többé nem lehet használni, mert az API zsúfolt elavult módszereket, amelyek megismétlik a funkcionalitás és a módszerek szinkronizált (ami csökkenti a termelékenységet, és mint általában, hogy használhatatlan). Használja ConcurrrentHashMap helyett hash.

Én inkább egy vizuális ábrázolás:

Mindhárom képviseli leképezés az egyedi kulcs értékek és következésképpen észre Map interfész.

HashMap - térkép alapján a kettőskereszt gombot. Támogatja műveletek O (1) / fel. Keys kell következetes végrehajtását kivonat, () és egyenlő (), hogy ez működjön.

LinkedHashMap nagyon hasonlít egy HashMap, de hozzáteszi, hogy a tudatosság a sorrendet, amely elemmel egészül ki (vagy van), így a rendelést iteráció egybeesik a megrendelést (vagy hozzáférési rend, attól függően, hogy a tervezési paraméterek).

Treemap - ez a térkép az alapja egy fa. Működése put / get időt vesz igénybe O (log n). Ez megköveteli, hogy az elemek voltak valamilyen mechanizmus az összehasonlítás vagy az összehasonlító, sem az összehasonlító. iterációs érdekében határozza meg a mechanizmus.

Csak egy újabb hozzájárulást a saját tapasztalat a kártyákat, amikor fogok használni mindegyik:

  • HashMap - a leghasznosabb, ha keresi a legjobb (gyors) végrehajtását.
  • Treemap (SortedMap interface) - a leghasznosabb, ha érdekel, hogy ilyen vagy, hogy megérintse a kulcsok egy adott sorrendben, amit meghatározni.
  • LinkedHashMap - előnyeit egyesíti a garantált foglalás Treemap növelése nélkül a támogatási költségeket Treemap. (Ez majdnem olyan gyors, mint HashMap). Különösen, LinkedHashMap is kiváló kiindulási pont létrehozásához egy objektum gyorsítótár, felülírva removeEldestEntry () módszer. Ez lehetővé teszi, hogy hozzon létre egy objektumot Cache, amelyek kivezetnek a bizonyos kritériumoknak.

Lásd, ahol minden osztály van egy osztály hierarchia a következő diagram (nagyobb). Treemap végrehajtja SortedMap és SortedMap egy HashMap - nincs.

Hash elavult és fel kell használni a megfelelő osztály ConcurrentHashMap.

  • Ez egy pár értéket (kulcsok, értékek)
  • NO duplikált kulcs értékek
  • rendezetlen osztályozatlan
  • Ő teszi egy null kulcsot, és több mint egy null értéket

hash tábla

  • Ahogy a hash-térképet
  • Ő nem teszi lehetővé null kulcsok és null értékek

LinkedHashMap

  • Elrendelte a végrehajtását a kártya változata
  • Alapján kapcsolt listák és a hash adatstruktúrák
  • Rendezett és rendezve verzió
  • Adatai alapján a hash szerkezetek

HashMap nem garantáljuk, hogy az iteráció. Meg lehet (és lesz) lehet akár teljesen megváltozhat, ha új elemekkel. Treemap hajtogat szerint „természetes rend” kulcsok módszer szerint compareTo () (vagy kívülről betáplált komparátor). Ezen kívül, hogy végrehajtja SortedMap interfészt, amely tartalmazza módszereket, hogy függ ez a sorrend. LinkedHashMap fog végighaladni a sorrendet, amelyben a bejegyzések kerültek a kártya

Nézze meg, hogyan változik a teljesítmény.

Fa térkép, amely végrehajtása a Küld térképet. A bonyolult művelet fel, kap és containsKey - O (log n), mert a természetes rendelés

@Amit: SortedMap - egy interfész, mivel Treemap - egy osztályt, amely megvalósítja az interfészt SortedMap. Ez azt jelenti, hogy ha azt akarjuk, hogy protokoll, amely SortedMap felkéri előadók csinálni. Fa, ha azt nem használják a keresési fa nem adja meg a rendezett adatokat, mert a fa lehet bármilyen fa. Ezért kap munkát, mint a Treemap rendezetten, rájön SortedMap (pl bináris keresés Tree - BST BST kiegyensúlyozott, mint például a AVL és RB fa, akár fa fa fa), főleg az iteratív keresések rendezett módon).

A csonthéjőrlemények HashMap. Ez ad adatokat O (1) rendelés nélkül

Treemap. Ez biztosítja az adatok O (log N), 2 alaprész megrendelt kulcsok

LinkedHashMap. Hash tábla egy láncolt lista (gondolom indexelt SkipList) képes tárolni az adatokat, mivel azok kerülnek be a fába. Ez a legalkalmasabb a végrehajtásához FVT (legutóbb használt).

Hadd mondjam el,

  • HashMap van megvalósítva hash tábla, és nincsenek megrendelések kulcsok és értékek.
  • Treemap végrehajtása alapján a piros-fekete fa struktúra és szervezi meg a gombot.
  • LinkedHashMap tartja behelyezés érdekében
  • Hash szinkronizált, szemben a HashMap. Azt overhead szinkronizálásra. Éppen ezért a HashMap kell alkalmazni, ha a program szálkezelésre.

Ez egy más végrehajtása ugyanazon a felületen. Minden végrehajtása vannak előnyei és vannak hátrányai (gyors feltöltés, lassú keresés), vagy fordítva.

Mindhárom osztály HashMap. Treemap és LinkedHashMap végre java.util.Map interfész és jelentésük értékeinek összehasonlítása egy egyedi kulcsot.

HashMap értékeit tartalmazza alapján a kulcsot.

Ez tartalmazza csak az egyedi elemeket.

Ez lehet egy null kulcsot és több null értékeket.

public class HashMap kiterjeszti AbstractMap végrehajtja Térkép, Cloneable, Serializable

  1. LinkedHashMap értékeit tartalmazza alapján a kulcsot.
  2. Ez tartalmazza csak az egyedi elemeket.
  3. Ez lehet egy null kulcsot és több null értékeket.

Ez ugyanaz, mint HashMap helyett támogatja a behelyezés érdekében. // Lásd. A ritkítás besorolás alatt.

public class LinkedHashMap kiterjeszti HashMap végrehajtja Térkép

  1. Treemap értékeit tartalmazza alapján a kulcsot. Ez megvalósítja a felületet, és kiterjeszti NavigableMap AbstractMap osztályban.
  2. Ez tartalmazza csak az egyedi elemeket.
  3. Azt nem lehet null kulcsot, de lehet több értéke nulla.

Ez ugyanaz, mint a HashMap ezzel szemben azt állítja növekvő sorrendben (válogatjuk a természetes rendje az irányadó.).

public class Treemap kiterjeszti AbstractMap végrehajtja NavigableMap, Cloneable, Serializable

  1. Hash - a lista egy tömb. Minden lista néven ismert egy vödör. Rendelet kanalak azonosított metódushívással kivonat, (). Hash értékeket tartalmaz alapján a kulcsot.
  2. Ez tartalmazza csak az egyedi elemeket.
  3. Talán nem volt kulcs vagy érték nulla.
  4. Ez szinkronizálva.

Ez egy örökletes osztályban.

public class hash kiterjeszti szótár végrehajtja Térkép, Cloneable, Serializable

Minden ajánlat a kulcs- kártya> értéket, és olyan módon, hogy végighaladni a kulcsokat. A legfontosabb különbség a csoportok az garanciák az idő és a rend a kulcsokat.

  1. HashMap kínál 0 (1) keresés és szerelést. Azonban, ha végighaladni a kulcsokat, a rendelési kulcsok lényegében önkényes. Ez végre egy sor kapcsolódó listák.
  2. Treemap kínál keresés O (log N) és a betét. Keys sorrendben, így ha szükség van, hogy megérintse a kulcsok rendezett sorrendben, akkor. Ez azt jelenti, hogy a kulcsokat kell hajtania a Összehasonlítható felületet. Treemap felismerték a piros-fekete fa.
  3. LinkedHashMap kínál 0 (1) keresés, beszúrás. A kulcsok vannak elrendezve annak érdekében, a behelyezés. Rájött, kétszeresen csatlakoztatott vödrök.

Képzeld el, hogy egy üres átadta Treemap, HashMap és LinkedHashMap az alábbi függvényt:

Az eredmény minden egyes következő.

Mert HashMap következtetést voltam a saját vizsgálatok, de lehet bármilyen sorrendben. Rendeléskor, nincs garancia.
Treemap, az eredmény volt,
A láncolt lista, az eredmény volt,

HashMap
Ez tartalmazhat egy nulla kulcsot.

HashMap nem támogatja az eljárást.

Treemap tartalmazhat nulla kulcsot.

Treemap támogatja emelkedő sorrendben.

LinkedHashMap lehet használni, hogy fenntartsák a behelyezés érdekében, amellyel a kulcsot behelyezzük a kártya, vagy is fel lehet használni, hogy fenntartsák a hozzáférés érdekében, amely hozzáférést biztosít a kulcsokat.

1) HashMap térképen = új HashMap ();

2) Treemap térképen = új Treemap ();

3) LinkedHashMap térképen = new LinkedHashMap ();