HashMap inicializálása Java-ban

1. Áttekintés

Ebben az oktatóanyagban megismerhetjük a HashMap Java-ban.

A Java 8-at, valamint a Java 9-et fogjuk használni.

2. A statikus inicializáló HashMap

Inicializálhatjuk a HashMap használva statikus kódblokk:

nyilvános statikus Térkép cikkMapOne; statikus {ArticleMapOne = új HashMap (); articleMapOne.put ("ar01", "Bevezetés a térképbe"); articleMapOne.put ("ar02", "Néhány cikk"); }

Az ilyen inicializálás előnye, hogy a térkép változtatható, de csak statikusan fog működni. Következésképpen a bejegyzéseket szükség szerint hozzá lehet adni és eltávolítani.

Menjünk előre, és teszteljük:

@Test public void givenStaticMap_whenUpdated_thenCorrect () {MapInitializer.articleMapOne.put ("NewArticle1", "Tömb konvertálása listává"); assertEquals (MapInitializer.articleMapOne.get ("NewArticle1"), "Tömb átalakítása listává"); }

Inicializálhatjuk a térképet a kettős zárójeles szintaxissal is:

Map doubleBraceMap = new HashMap () {{put ("kulcs1", "érték1"); put ("kulcs2", "érték2"); }};

Vegye figyelembe, hogy meg kell próbálnunk elkerülni ezt az inicializálási technikát, mert minden használatkor egy névtelen extra osztályt hoz létre, rejtett hivatkozásokat tart a bezáró objektumra, és memóriaszivárgási problémákat okozhat.

3. Java gyűjtemények használata

Ha létre kell hoznunk egy egyedülálló, változhatatlan térképet egyetlen bejegyzéssel, Collections.singletonMap () nagyon hasznos lesz:

public static Map createSingletonMap () {return Collections.singletonMap ("felhasználónév1", "jelszó1"); }

Ne feledje, hogy a térkép itt megváltoztathatatlan, és ha megpróbálunk további bejegyzéseket hozzáadni, akkor dob java.lang.UnsupportedOperationException.

Használhatunk egy megváltoztathatatlan üres térképet is Collections.emptyMap ():

Térkép üresMap = Collections.emptyMap ();

4. A Java 8 Way

Ebben a szakaszban vizsgáljuk meg a térkép inicializálásának módjait a Java 8 használatával Stream API.

4.1. Használata Collectors.toMap ()

Használjuk a Folyam kétdimenziós Húr tömb, és gyűjtsük össze őket egy térképre:

Map map = Stream.of (új karakterlánc [] [] {{"Hello", "World"}, {"John", "Doe"},}). Gyűjt (Collectors.toMap (adatok -> adatok [0] , adatok -> adatok [1]));

Itt vegye figyelembe a kulcs adattípusát és értékét Térkép ugyanaz.

Annak érdekében, hogy általánosabb legyen, vegyük a Tárgyak és végezze el ugyanazt a műveletet:

 Map map = Stream.of (új objektum [] [] {{"data1", 1}, {"data2", 2},}). Gyűjt (Collectors.toMap (adatok -> (Karakterlánc) adatok [0], adatok -> (Egész) adatok [1]));

Ennek eredményeként elkészítjük a kulcs térképét a-ként Húr és érték mint egy Egész szám.

4.2. A. Adatfolyam használatával Térkép. Belépés

Itt fogjuk használni a Térkép. Belépés. Ez egy másik megközelítés, ahol különböző kulcs- és értéktípusok vannak.

Először is használjuk SimpleEntry a Belépés felület:

Térképtérkép = Stream.of (új AbstractMap.SimpleEntry ("ötlet", 1), új AbstractMap.SimpleEntry ("mobil", 2)) .collect (Collectors.toMap (Map.Entry :: getKey, Map.Entry :: getValue));

Most hozzuk létre a térképet a segítségével SimpleImmutableEntry végrehajtás:

Térképtérkép = Stream.of (új AbstractMap.SimpleImmutableEntry ("ötlet", 1), új AbstractMap.SimpleImmutableEntry ("mobil", 2)) .collect (Collectors.toMap (Map.Entry :: getKey, Map.Entry :: getValue));

4.3. Megváltoztathatatlan térkép inicializálása

Bizonyos használati esetekben inicializálnunk kell egy megváltoztathatatlan térképet. Ezt úgy tehetjük meg, hogy becsomagoljuk a Collectors.toMap () belül Collectors.collectingAndThen ():

Térképtérkép = Stream.of (új karakterlánc [] [] {{"Hello", "Világ"}, {"John", "Doe"},}). Gyűjt (Collectors.collectingAndThen (Collectors.toMap (adatok ->) adatok [0], adatok -> adatok [1]), Gyűjtemények :: unmodifiableMap));

Ne feledje, hogy kerülni kell az ilyen inicializálás használatát Folyamok, mivel ez óriási teljesítményt okozhat a rezsi felett, és rengeteg szemetet tárolnak a térkép inicializálásához.

5. A Java 9 Way

A Java 9 különféle gyári módszerekkel érkezik a Térkép felület, amely leegyszerűsíti a megváltoztathatatlan térképek létrehozását és inicializálását.

Menjünk előre, és vizsgáljuk meg ezeket a gyári módszereket.

5.1. Map.of ()

Ez a gyári módszer nem igényel argumentumot, egyetlen argumentumot és változó argumentumokat:

Map emptyMap = Map.of (); Map singletonMap = Map.of ("key1", "value"); Térképtérkép = Map.of ("kulcs1", "érték1", "kulcs2", "érték2");

Ne feledje, hogy ez a módszer legfeljebb 10 kulcs-érték párot támogat.

5.2. Map.ofEntries ()

Hasonló a Map.of () de nincs korlátozása a kulcs-érték párok számának:

Térkép térkép = Map.ofEntries (új AbstractMap.SimpleEntry ("név", "John"), új AbstractMap.SimpleEntry ("város", "budapest"), új AbstractMap.SimpleEntry ("zip", "000000"), új AbstractMap.SimpleEntry ("home", "1231231231"));

Ne feledje, hogy a gyári módszerek változhatatlan térképeket állítanak elő, így minden mutáció a UnsupportedOperationException.

Nem engedélyeznek sem nullkulcsot, sem másolatot.

Ha az inicializálás után szükségünk van egy változtatható vagy növekvő térképre, létrehozhatjuk a Térkép interfész és átadja ezeket a megváltoztathatatlan térképeket a konstruktorban:

Térképtérkép = új HashMap (Map.of ("kulcs1", "érték1", "kulcs2", "érték2")); Map map2 = új HashMap (Map.ofEntries (új AbstractMap.SimpleEntry ("név", "John"), új AbstractMap.SimpleEntry ("város", "budapest")));

6. Guava használata

Miután megvizsgáltuk az alapvető Java használatának módjait, lépjünk előre, és inicializáljunk egy térképet a Guava könyvtár segítségével:

Térképcikkek = ImmutableMap.of ("Cím", "Új cikkem", "Cím2", "Második cikk");

Ez megváltoztathatatlan térképet hozna létre, és egy módosítható térképet hozna létre:

Térkép cikkek = Maps.newHashMap (ImmutableMap.of ("Cím", "Új cikkem", "2. cím", "Második cikk"));

A módszer, a metódus ImmutableMap.of () túlterhelt verzióival is rendelkezik, amelyek akár 5 pár kulcsérték-paramétert is igénybe vehetnek. Így néz ki egy példa 2 pár paraméterrel:

ImmutableMap.of ("kulcs1", "érték1", "kulcs2", "érték2");

7. Következtetés

Ebben a cikkben az inicializálás különféle módjait tártuk fel Térkép, különösen üres, egyedülálló, változhatatlan és változtatható térképek készítéséhez. Mint láthatjuk, a Java 9 óta óriási fejlődés tapasztalható ezen a területen.

Mint mindig, a minta forráskód a Github projektben található. A Java 9 példák itt találhatók, a Guava minta pedig itt található.