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.