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.


$config[zx-auto] not found$config[zx-overlay] not found