Útmutató a Guava Multimap-hoz

1. Áttekintés

Ebben a cikkben megnézzük az alábbiak egyikét Térkép implementációk a Google Guava könyvtárból - Multimap. Ez egy olyan gyűjtemény, amely a kulcsokat feltérképezi a hasonló értékekhez java.util.Térkép, de amelyben az egyes kulcsok több értékkel is társíthatók.

2. Maven-függőség

Először adjunk hozzá egy függőséget:

 com.google.guava guava 29.0-jre 

A legújabb verzió itt található.

3. Multimap Végrehajtás

Guava esetében Multimap, ha két értéket adunk hozzá ugyanahhoz a kulcshoz, akkor a második érték nem írja felül az első értéket. Ehelyett két eredményünk lesz az eredményben térkép. Nézzünk meg egy tesztesetet:

Karaktersorozat = "kulcs"; Többtérképes térkép = ArrayListMultimap.create (); map.put (kulcs, "firstValue"); map.put (kulcs, "secondValue"); assertEquals (2, map.size ()); 

A térképTartalma kimenetelű lesz:

{a-kulcs = [elsőérték, másodikérték]}

Amikor az „a-key” kulcson keresztül megkapjuk az értékeket, akkor megkapjuk Gyűjtemény amely az „firstValue” és „secondValue” értékeket tartalmazza:

Gyűjtemény értékei = map.get (kulcs);

Az értékek nyomtatása:

[firstValue, secondValue]

4. A standardhoz képest Térkép

Normál térkép innen: java.util A csomag nem ad lehetőséget arra, hogy ugyanazon kulcshoz több értéket rendeljünk. Vegyünk egy egyszerű esetet, amikor put () két értéket a-ba Térkép ugyanazt a kulcsot használva:

Karaktersorozat = "kulcs"; Térképtérkép = new LinkedHashMap (); map.put (kulcs, "firstValue"); map.put (kulcs, "secondValue"); assertEquals (1, map.size ()); 

A kapott térkép csak egy eleme van („SecondValue”), egy másodperc miatt put () az első értéket felülíró művelet. Vajon ugyanazt a magatartást akarjuk-e elérni, mint Guavaéval Multimap, létre kellene hoznunk a Térkép hogy van egy Lista mint értéktípus:

Karaktersorozat = "kulcs"; Térkép map = new LinkedHashMap (); List értékek = map.get (kulcs); if (értékek == null) {értékek = új LinkedList (); values.add ("firstValue"); values.add ("secondValue"); } map.put (kulcs, értékek); assertEquals (1, map.size ());

Nyilvánvaló, hogy nem túl kényelmes használni. És ha ilyen szükségünk van a kódunkban, akkor a Guava-nak Multimap jobb választás lehet, mint java.util.Térkép.

Egy dolgot kell itt észrevennünk, hogy bár van egy listánk, amelyben két elem van, méret() metódus visszatér 1. In Multimap, méret () az a-ban tárolt értékek tényleges számát adja vissza Térkép, de keySet (). size () a különálló kulcsok számát adja vissza.

5. Előnyei Multimap

A multimapokat általában olyan helyeken használják, ahol a Térkép különben megjelent volna. A különbségek a következők:

  • A bejegyzés hozzáadása előtt nem szükséges feltölteni egy üres gyűjteményt put ()
  • Get () metódus soha nem tér vissza nulla, csak egy üres gyűjtemény (nem kell ellenőriznünk nulla mint-ban-ben Térkép próbaper)
  • Kulcsot tartalmaz a Multimap akkor és csak akkor, ha legalább egy értéket feltérképez. Minden olyan művelet, amely miatt a kulcs nulla társított értékkel rendelkezik, eltávolítja azt a kulcsot a Multimap (ban ben Térkép, akkor is, ha az összes értéket eltávolítjuk a gyűjteményből, akkor is üresen maradunk Gyűjtemény értékként, és ez felesleges memóriaterhelés)
  • A teljes belépési értékek száma elérhető méret()

6. Következtetés

Ez a cikk bemutatja, hogyan és mikor kell használni a guavát Multimap. Összehasonlítja a standarddal java.util.Térkép és bemutatja Guava profijait Multimap.

Mindezek a példák és kódrészletek megtalálhatók a GitHub projektben - ez egy Maven projekt, ezért könnyen importálhatónak és futtathatónak kell lennie.