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.