Få den første nøgle og værdi fra et HashMap

1. Oversigt

I denne vejledning diskuterer vi, hvordan du får det første nøgleværdipar fra en HashMap uden at kende nøglen.

Først bruger vi en iterator og derefter en stream for at få den første post. Endelig vil vi diskutere et problem HashMap præsenterer, når vi ønsker at få den første post, og hvordan vi løser den.

2. Brug af en Iterator

Lad os overveje, at vi har følgende HashMap:

Kort hashMap = nyt HashMap (); hashMap.put (5, "A"); hashMap.put (1, "B"); hashMap.put (2, "C");

I dette eksempel bruger vi en iterator for at få det første nøgleværdipar. Så lad os oprette en iterator på den indgangssæt af HashMap og ring til Næste() metode til at hente den første post:

Iterator iterator = hashMap.entrySet (). iterator (); Map.Entry actualValue = iterator.next (); Map.Entry expectValue = new AbstractMap.SimpleEntry (1, "B"); assertEquals (forventet værdi, faktisk værdi);

3. Brug af en Java Stream

En anden tilgang er at bruge Java Stream API. Lad os oprette en stream på indgangssæt og ring til findFirst () metode til at få sin første post:

Map.Entry actualValue = hashMap.entrySet () .stream () .findFirst () .get (); 
Map.Entry expectValue = new AbstractMap.SimpleEntry (1, "B"); assertEquals (forventet værdi, faktisk værdi);

4. Problem med indsætningsordren

Lad os huske, hvordan vi skabte, for at præsentere dette problem hashMap, parret 5 = A blev indsat som den første post, derefter 1 = B og endelig 2 = C. Lad os kontrollere dette ved at udskrive indholdet af vores HashMap:

System.out.println (hashMap);
{1 = B, 2 = C, 5 = A}

Som vi kan se, er bestilling ikke den samme. Det HashMap-klasse implementering garanterer ikke indsætningsordren.

Lad os nu tilføje endnu et element til hashMap:

hashMap.put (0, "D"); Iterator iterator = hashMap.entrySet (). iterator (); Map.Entry actualValue = iterator.next (); Map.Entry expectValue = new AbstractMap.SimpleEntry (0, "D"); assertEquals (forventet værdi, faktisk værdi);

Som vi kan se, er den første post ændret igen (til 0 = D I dette tilfælde). Dette beviser det også HashMap garanterer ikke en indsætningsordre.

Så, hvis vi ønsker at bevare ordren, skal vi bruge en LinkedHashMap i stedet:

Kort linkedHashMap = nyt LinkedHashMap (); linkedHashMap.put (5, "A"); linkedHashMap.put (1, "B"); linkedHashMap.put (2, "C"); linkedHashMap.put (0, "D"); Iterator iterator = linkedHashMap.entrySet (). iterator (); Map.Entry actualValue = iterator.next (); Map.Entry expectValue = new AbstractMap.SimpleEntry (5, "A"); assertEquals (forventet værdi, faktisk værdi);

5. Konklusion

I denne korte artikel diskuterede vi forskellige tilgange for at få den første post fra a HashMap.

Det vigtigste punkt at bemærke er, at HashMap implementering garanterer ikke nogen rækkefølge af indsættelse. Så hvis vi er interesserede i at bevare indsættelsesordren, skal vi bruge en LinkedHashMap.

Kodeeksemplet er tilgængeligt på GitHub.


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