Inicializujte HashMap v prostredí Java
1. Prehľad
V tomto výučbe sa dozvieme o rôznych spôsoboch inicializácie a HashMap v Jave.
Použijeme Java 8 aj Java 9.
2. Inicializátor statiky pre statiku HashMap
Môžeme inicializovať a HashMap pomocou a statický blok kódu:
verejný statický Mapový článokMapOne; static {articleMapOne = nový HashMap (); articleMapOne.put ("ar01", "Úvod do mapy"); articleMapOne.put ("ar02", "Niektorý článok"); }
Výhodou tohto druhu inicializácie je, že mapa je premenlivá, ale bude fungovať iba pri statickej. Následne je možné podľa potreby pridávať a odstraňovať položky.
Poďme do toho a otestujme to:
@Test public void givenStaticMap_whenUpdated_thenCorrect () {MapInitializer.articleMapOne.put ("NewArticle1", "Previesť pole na zoznam"); assertEquals (MapInitializer.articleMapOne.get ("NewArticle1"), "Konvertovať pole na zoznam"); }
Mapu môžeme tiež inicializovať pomocou syntaxe dvojitých zátvoriek:
Mapa doubleBraceMap = nový HashMap () {{put ("key1", "value1"); put ("kľúč2", "hodnota2"); }};
Poznač si to musíme sa pokúsiť vyhnúť sa tejto inicializačnej technike, pretože pri každom použití vytvára anonymnú triedu navyše, obsahuje skryté odkazy na ohraničujúci objekt, a mohli by spôsobiť problémy s únikom pamäte.
3. Používanie zbierok Java
Ak potrebujeme vytvoriť singletonovú nemennú mapu s jediným záznamom, Collections.singletonMap () sa stáva veľmi užitočným:
verejná statická mapa createSingletonMap () {návrat Collections.singletonMap ("používateľské meno1", "heslo1"); }
Upozorňujeme, že táto mapa je nemenná, a ak sa pokúsime pridať ďalšie položky, hodí sa java.lang.UnsupportedOperationException.
Nemennú prázdnu mapu môžeme vytvoriť aj pomocou Collections.emptyMap ():
Mapa emptyMap = Collections.emptyMap ();
4. Java 8 Way
V tejto časti sa pozrime na spôsoby inicializácie mapy pomocou Java 8 Stream API.
4.1. Použitím Collectors.toMap ()
Použime a Prúd dvojrozmerného String zoskupiť a zhromaždiť ich do mapy:
Map map = Stream.of (new String [] [] {{"Hello", "World"}, {"John", "Doe"},}). Collect (Collectors.toMap (data -> data [0] , data -> data [1]));
Všimnite si tu dátový typ kľúča a hodnotu Mapa je rovnaký.
Aby to bolo všeobecnejšie, vezmime si pole Predmety a vykonať rovnakú operáciu:
Mapa mapy = Stream.of (nový objekt [] [] {{"data1", 1}, {"data2", 2},}). Zhromažďovať (Collectors.toMap (data -> (reťazec) údaje [0], data -> (Integer) data [1]));
Vo výsledku vytvoríme mapu kľúča ako a String a hodnotu ako Celé číslo.
4.2. Používanie prúdu Mapa. Vstup
Tu použijeme inštancie Mapa. Vstup. Toto je ďalší prístup, kde máme rôzne typy kľúčov a hodnôt.
Najprv použijeme SimpleEntry implementácia Vstup rozhranie:
Mapa mapy = Stream.of (nový AbstractMap.SimpleEntry ("nápad", 1), nový AbstractMap.SimpleEntry ("mobilný", 2)) .collect (Collectors.toMap (Map.Entry :: getKey, Map.Entry :: getValue));
Teraz vytvorme mapu pomocou SimpleImmutableEntry implementácia:
Mapa mapy = Stream.of (nový AbstractMap.SimpleImmutableEntry ("nápad", 1), nový AbstractMap.SimpleImmutableEntry ("mobilný", 2)) .collect (Collectors.toMap (Map.Entry :: getKey, Map.Entry :: getValue));
4.3. Inicializuje sa nemenná mapa
V určitých prípadoch použitia musíme inicializovať nemennú mapu. To by sa dalo urobiť zabalením Collectors.toMap () vo vnútri Collectors.collectingAndThen ():
Mapa mapy = Stream.of (nový reťazec [] [] {{"Hello", "World"}, {"John", "Doe"},}). Collect (Collectors.collectingAndThen (Collectors.toMap (data -> data [0], data -> data [1]), Collections :: unmodifiableMap));
Upozorňujeme, že by sme sa mali vyhnúť použitiu takejto inicializácie pomocou Prúdy, pretože by to mohlo spôsobiť obrovský režijný výkon a veľa odpadkových objektov sa vytvára len na inicializáciu mapy.
5. Java 9 Way
Java 9 prichádza s rôznymi továrenskými metódami v Mapa rozhranie, ktoré zjednodušuje vytváranie a inicializáciu nemenných máp.
Poďme ďalej a pozrime sa na tieto továrenské metódy.
5.1. Mapa. ()
Táto továrenská metóda nevyžaduje žiadny argument, jediný argument a premenné argumenty:
Mapa emptyMap = Map.of (); Map singletonMap = Map.of ("key1", "value"); Map map = Map.of ("key1", "value1", "key2", "value2");
Upozorňujeme, že táto metóda podporuje iba maximálne 10 párov kľúč - hodnota.
5.2. Map.ofEntries ()
Je to podobné ako s Mapa. () ale nemá žiadne obmedzenia týkajúce sa počtu párov kľúč - hodnota:
Map map = Map.ofEntries (new AbstractMap.SimpleEntry ("name", "John"), new AbstractMap.SimpleEntry ("city", "budapest"), new AbstractMap.SimpleEntry ("zip", "000000"), new AbstractMap.SimpleEntry ("home", "1231231231"));
Pamätajte, že továrenské metódy vytvárajú nemenné mapy, a preto akákoľvek mutácia spôsobí a UnsupportedOperationException.
Tiež neumožňujú nulové kľúče alebo duplikáty kľúčov.
Ak teraz po inicializácii potrebujeme premenlivú alebo rastúcu mapu, môžeme vytvoriť ľubovoľnú implementáciu súboru Mapa rozhranie a odovzdať tieto nemenné mapy v konštruktore:
Mapa mapa = nový HashMap (Map.of ("kľúč1", "hodnota1", "kľúč2", "hodnota2")); Mapa map2 = nová HashMap (Map.ofEntries (nová AbstractMap.SimpleEntry ("meno", "John"), nová AbstractMap.SimpleEntry ("mesto", "budapešť")));
6. Používanie Guavy
Keď sme sa pozreli na spôsoby použitia základnej Javy, posuňme sa ďalej a inicializujme mapu pomocou knižnice Guava:
Články na mape = ImmutableMap.of („Názov“, „Môj nový článok“, „Názov2“, „Druhý článok“);
Vytvorilo by to nemennú mapu a zmeniteľnú:
Map articles = Maps.newHashMap (ImmutableMap.of ("Názov", "Môj nový článok", "Názov2", "Druhý článok"));
Metóda ImmutableMap.of () má tiež preťažené verzie, ktoré môžu trvať až 5 párov parametrov kľúč - hodnota. Takto by vyzeral príklad s 2 pármi parametrov:
ImmutableMap.of ("kľúč1", "hodnota1", "kľúč2", "hodnota2");
7. Záver
V tomto článku sme skúmali rôzne spôsoby inicializácie a Mapa, najmä na vytváranie prázdnych, samostatných, nemenných a premenlivých máp. Ako vidíme, od verzie Java 9 došlo v tejto oblasti k obrovskému zlepšeniu.
Vzorový zdrojový kód sa ako vždy nachádza v projekte Github. Tu sa nachádzajú príklady Java 9 a tu vzorka Guava.