Ú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
- 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.