Získajte prvý kľúč a hodnotu z HashMap
1. Prehľad
V tomto výučbe si ukážeme, ako získať prvý pár kľúč - hodnota z a HashMap bez znalosti kľúča.
Najskôr použijeme iterátor a potom prúd, aby sme získali prvý záznam. Na záver si povieme niečo o probléme HashMap predstavuje, kedy chceme získať prvý záznam a ako ho vyriešiť.
2. Pomocou iterátora
Uvažujme, že máme nasledovné HashMap:
Mapa hashMap = nová HashMap (); hashMap.put (5, "A"); hashMap.put (1, "B"); hashMap.put (2, "C");
V tomto príklade použijeme znak iterátor získať prvý pár kľúč - hodnota. Poďme teda vytvoriť iterátor na vstupná sada z HashMap a zavolajte na Ďalšie() metóda na získanie prvého záznamu:
Iterátor iterátor = hashMap.entrySet (). iterátor (); Map.Entry actualValue = iterator.next (); Map.Entry expectValue = nový AbstractMap.SimpleEntry (1, "B"); assertEquals (expectValue, actualValue);
3. Používanie toku Java
Ďalším prístupom je použitie rozhrania Java Stream API. Vytvoríme stream na vstupná sada a zavolajte na findFirst () metóda na získanie prvého záznamu:
Map.Entry actualValue = hashMap.entrySet () .stream () .findFirst () .get ();
Map.Entry expectValue = nový AbstractMap.SimpleEntry (1, "B"); assertEquals (expectValue, actualValue);
4. Problém s objednávkou na vloženie
Na predstavenie tohto problému si pripomeňme, ako sme ho tvorili hashMap, pár 5 = A bol vložený ako prvý záznam 1 = B a nakoniec 2 = C.. Poďme to skontrolovať vytlačením obsahu nášho HashMap:
System.out.println (hashMap);
{1 = B, 2 = C, 5 = A}
Ako vidíme, objednávanie nie je rovnaké. The Trieda HashMap implementácia nezaručuje objednávku vloženia.
Poďme teraz pridať ešte jeden prvok hashMap:
hashMap.put (0, "D"); Iterátor iterátor = hashMap.entrySet (). iterátor (); Map.Entry actualValue = iterator.next (); Map.Entry expectValue = nový AbstractMap.SimpleEntry (0, "D"); assertEquals (expectValue, actualValue);
Ako vidíme, prvý záznam sa opäť zmenil (na 0 = D v tomto prípade). To tiež dokazuje HashMap nezaručuje objednávku vloženia.
Takže ak chceme zachovať poriadok, mali by sme použiť a LinkedHashMap namiesto toho:
Mapa linkedHashMap = nová LinkedHashMap (); linkedHashMap.put (5, "A"); linkedHashMap.put (1, "B"); linkedHashMap.put (2, "C"); linkedHashMap.put (0, "D"); Iterátor iterátor = linkedHashMap.entrySet (). iterátor (); Map.Entry actualValue = iterator.next (); Map.Entry expectValue = nový AbstractMap.SimpleEntry (5, "A"); assertEquals (expectValue, actualValue);
5. Záver
V tomto krátkom článku sme diskutovali o rôznych prístupoch k získaniu prvého záznamu z a HashMap.
Najdôležitejšie je poznamenať, že HashMap implementácia nezaručuje žiadne poradie vloženia. Ak teda máme záujem o zachovanie objednávky, mali by sme použiť a LinkedHashMap.
Príklad kódu je k dispozícii na GitHub.