Szerezd meg az első kulcsot és értéket egy HashMap-ból

1. Áttekintés

Ebben az oktatóanyagban megvitatjuk, hogyan lehet megszerezni az első kulcs-érték párost az HashMap a kulcs ismerete nélkül.

Először egy iterátort, majd egy adatfolyamot használunk az első bejegyzéshez. Végül megbeszéljük a problémát HashMap bemutatja, mikor szeretnénk megszerezni az első bejegyzést, és hogyan lehet megoldani.

2. Iterátor használata

Vegyük fontolóra, hogy az alábbiakkal rendelkezünk HashMap:

Map hashMap = új HashMap (); hashMap.put (5, "A"); hashMap.put (1, "B"); hashMap.put (2, "C");

Ebben a példában egy iterátor az első kulcs-érték pár megszerzéséhez. Tehát hozzunk létre egy iterátor a bejegyzéskészlet a HashMap és felhívja a következő() módszer az első bejegyzés lekérésére:

Iterátor iterator = hashMap.entrySet (). iterator (); Map.Entry actualValue = iterator.next (); Map.Entry expectedValue = new AbstractMap.SimpleEntry (1, "B"); assertEquals (várható érték, tényleges érték);

3. Java Stream használata

Egy másik megközelítés a Java Stream API használata. Hozzunk létre egy patakot a bejegyzéskészlet és felhívja a findFirst () módszer az első bejegyzés megszerzéséhez:

Map.Entry actualValue = hashMap.entrySet () .stream () .findFirst () .get (); 
Map.Entry expectedValue = new AbstractMap.SimpleEntry (1, "B"); assertEquals (várható érték, tényleges érték);

4. Probléma a beszúrási sorrenddel

A probléma bemutatásához emlékezzünk arra, hogyan hoztuk létre hashMap, a pár 5 = A akkor került be első bejegyzésként 1 = B és végül 2 = C. Ellenőrizzük ezt a tartalom kinyomtatásával HashMap:

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

Mint láthatjuk, a rendelés nem ugyanaz. A HashMap osztály a megvalósítás nem garantálja a beillesztési sorrendet.

Most tegyünk hozzá még egy elemet hashMap:

hashMap.put (0, "D"); Iterátor iterator = hashMap.entrySet (). iterator (); Map.Entry actualValue = iterator.next (); Map.Entry expectedValue = new AbstractMap.SimpleEntry (0, "D"); assertEquals (várható érték, tényleges érték);

Mint láthatjuk, az első bejegyzés ismét megváltozott (a következőre: 0 = D ebben az esetben). Ez is ezt bizonyítja HashMap nem garantálja a beillesztési sorrendet.

Így, ha meg akarjuk őrizni a rendet, akkor a LinkedHashMap helyette:

Map linkedHashMap = új LinkedHashMap (); linkedHashMap.put (5, "A"); linkedHashMap.put (1, "B"); kapcsoltHashMap.put (2, "C"); linkedHashMap.put (0, "D"); Iterátor iterator = linkedHashMap.entrySet (). iterator (); Map.Entry actualValue = iterator.next (); Map.Entry expectedValue = new AbstractMap.SimpleEntry (5, "A"); assertEquals (várható érték, tényleges érték);

5. Következtetés

Ebben a rövid cikkben különböző megközelítéseket vitattunk meg az első bejegyzés megszerzéséhez a HashMap.

A legfontosabb szempont, hogy megjegyezzük HashMap a megvalósítás nem garantálja a beillesztés sorrendjét. Tehát, ha érdekel a beszúrási sorrend megőrzése, akkor a LinkedHashMap.

A kódpélda elérhető a GitHubon.