Inicijalizirajte HashMap u Javi

1. Pregled

U ovom uputstvu naučit ćemo o različitim načinima inicijalizacije a HashMap na Javi.

Koristit ćemo Java 8 kao i Java 9.

2. Statički inicijator za statički HashMap

Možemo inicijalizirati a HashMap pomoću a statički blok koda:

javna statička karta articleMapOne; statički {articleMapOne = novi HashMap (); articleMapOne.put ("ar01", "Uvod u mapu"); articleMapOne.put ("ar02", "Neki članak"); }

Prednost ove vrste inicijalizacije je u tome što je karta promjenjiva, ali će raditi samo za statičke. Slijedom toga, unosi se mogu dodavati i uklanjati prema potrebi i kada je to potrebno.

Krenimo i testirajmo:

@Test javna praznina givenStaticMap_whenUpdated_thenCorrect () {MapInitializer.articleMapOne.put ("NewArticle1", "Pretvori niz u popis"); assertEquals (MapInitializer.articleMapOne.get ("NewArticle1"), "Pretvori niz u popis"); }

Također možemo inicijalizirati kartu koristeći sintaksu dvostrukih zagrada:

Mapa doubleBraceMap = new HashMap () {{put ("key1", "value1"); put ("key2", "value2"); }};

Imajte na umu da moramo pokušati izbjeći ovu tehniku ​​inicijalizacije jer ona stvara anonimnu dodatnu klasu pri svakoj upotrebi, sadrži skrivene reference na zatvoreni objekt, i može uzrokovati probleme s curenjem memorije.

3. Korištenje Java zbirki

Ako trebamo stvoriti jednu nepromjenjivu mapu s jednim unosom, Collections.singletonMap () postaje vrlo korisno:

javna statička karta createSingletonMap () {return Collections.singletonMap ("korisničko ime1", "lozinka1"); }

Imajte na umu da je karta ovdje nepromjenjiva i ako pokušamo dodati još unosa, bacit će se java.lang.UnsupportedOperationException.

Također možemo stvoriti nepromjenjivu praznu kartu pomoću Collections.emptyMap ():

Karta emptyMap = Collections.emptyMap ();

4. Java 8 način

U ovom odjeljku pogledajmo načine inicijalizacije karte pomoću Jave 8 Stream API.

4.1. Koristeći Collectors.toMap ()

Koristimo a Stream dvodimenzionalne Niz niz i sakupite ih na kartu:

Map map = Stream.of (novi String [] [] {{"Hello", "World"}, {"John", "Doe"},}). Collect (Collectors.toMap (data -> data [0]) , podaci -> podaci [1]));

Ovdje primijetite vrstu podataka ključa i vrijednosti Karta je isti.

Da bismo ga učinili općenitijim, uzmimo niz Predmeti i izvršite istu operaciju:

 Karta mape = Stream.of (novi objekt [] [] {{"data1", 1}, {"data2", 2},}). Collect (Collectors.toMap (data -> (String) data [0], podaci -> (Integer) podaci [1]));

Kao rezultat, kreiramo mapu ključa kao Niz a vrijednost kao Cijeli broj.

4.2. Korištenje streama od Karta.Ulaz

Ovdje ćemo upotrijebiti primjerke Karta.Ulaz. Ovo je još jedan pristup u kojem imamo različite tipove ključeva i vrijednosti.

Prvo, poslužimo se SimpleEntry provedba Ulazak sučelje:

Map map = Stream.of (new AbstractMap.SimpleEntry ("idea", 1), new AbstractMap.SimpleEntry ("mobile", 2)) .collect (Collectors.toMap (Map.Entry :: getKey, Map.Entry :: getValue));

Sada kreirajmo kartu pomoću SimpleImmutableEntry provedba:

Map map = Stream.of (new AbstractMap.SimpleImmutableEntry ("idea", 1), new AbstractMap.SimpleImmutableEntry ("mobile", 2)) .collect (Collectors.toMap (Map.Entry :: getKey, Map.Entry :: getValue));

4.3. Inicijalizacija nepromjenjive karte

U određenim slučajevima upotrebe, moramo inicijalizirati nepromjenjivu kartu. To se može učiniti umotavanjem datoteke Collectors.toMap () iznutra Collectors.collectingAndThen ():

Map map = Stream.of (new String [] [] {{"Hello", "World"}, {"John", "Doe"},}). Collect (Collectors.collectingAndThen (Collectors.toMap (podaci -> podaci [0], podaci -> podaci [1]), Zbirke :: unmodifiableMap));

Imajte na umu da bismo trebali izbjegavati korištenje takve inicijalizacije pomoću Potoci, jer bi to moglo prouzročiti ogromne režijske performanse, a mnoštvo predmeta za smeće stvara se samo radi inicijalizacije karte.

5. Java 9 način

Java 9 dolazi s raznim tvorničkim metodama u Karta sučelje koje pojednostavljuje stvaranje i inicijalizaciju nepromjenjivih karata.

Idemo naprijed i razmotrimo ove tvorničke metode.

5.1. Map.of ()

Ova tvornička metoda ne uzima argument, jedan argument i varijable:

Karta emptyMap = Map.of (); Karta singletonMap = Map.of ("key1", "value"); Karta karte = Map.of ("key1", "value1", "key2", "value2");

Imajte na umu da ova metoda podržava samo najviše 10 parova ključ / vrijednost.

5.2. Map.ofEntries ()

Slično je Map.of () ali nema ograničenja na broj parova ključ / vrijednost:

Map map = Map.ofEntries (new AbstractMap.SimpleEntry ("name", "John"), new AbstractMap.SimpleEntry ("city", "budapest"), new AbstractMap.SimpleEntry ("zip", "000000"), new AbstractMap.SimpleEntry ("dom", "1231231231"));

Imajte na umu da tvorničke metode proizvode nepromjenjive karte, stoga će svaka mutacija rezultirati a UnsupportedOperationException.

Također, ne dopuštaju null ključeve ili dvostruke ključeve.

Ako nam je nakon inicijalizacije potrebna promjenjiva ili rastuća mapa, možemo stvoriti bilo koju od implementacija Karta sučelje i proslijedite ove nepromjenjive karte u konstruktor:

Karta karte = nova HashMap (Map.of ("key1", "value1", "key2", "value2")); Map map2 = nova HashMap (Map.ofEntries (new AbstractMap.SimpleEntry ("name", "John"), new AbstractMap.SimpleEntry ("city", "budapest")));

6. Korištenje Guave

Dok smo proučavali načine korištenja jezgre Java, krenimo dalje i inicijalizirajmo kartu pomoću biblioteke Guava:

Članci na mapi = ImmutableMap.of ("Naslov", "Moj novi članak", "Naslov2", "Drugi članak");

To bi stvorilo nepromjenjivu mapu i izmijenjivu:

Članci na mapi = Maps.newHashMap (ImmutableMap.of ("Naslov", "Moj novi članak", "Naslov2", "Drugi članak"));

Metoda ImmutableMap.of () također ima preopterećene verzije koje mogu potrajati do 5 parova parametara ključ / vrijednost. Evo kako bi izgledao primjer s 2 para parametara:

ImmutableMap.of ("key1", "value1", "key2", "value2");

7. Zaključak

U ovom smo članku istražili različite načine inicijalizacije a Karta, posebno za stvaranje praznih, jednokratnih, nepromjenjivih i promjenjivih karata. Kao što vidimo, na ovom polju došlo je do velikog napretka od Jave 9.

Kao i uvijek, uzorak izvornog koda nalazi se u projektu Github. Primjeri Java 9 nalaze se ovdje, a uzorak Guave ovdje.