Nabavite prvi ključ i vrijednost s HashMap-a

1. Pregled

U ovom uputstvu razgovarat ćemo o tome kako dobiti prvi par ključ / vrijednost iz a HashMap a da nije znao ključ.

Prvo ćemo upotrijebiti iterator, a zatim stream kako bismo dobili prvi unos. Napokon, razgovarat ćemo o problemu HashMap predstavlja kada želimo dobiti prvi unos i kako ga riješiti.

2. Korištenje Iteratora

Razmotrimo da imamo sljedeće HashMap:

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

U ovom ćemo primjeru koristiti iterator da biste dobili prvi par ključ / vrijednost. Pa, kreirajmo iterator na ulazni set od HashMap i nazovite Sljedeći() metoda za dohvaćanje prvog unosa:

Iterator iterator = hashMap.entrySet (). iterator (); Map.Entry actualValue = iterator.next (); Map.Entry očekujeValue = nova AbstractMap.SimpleEntry (1, "B"); assertEquals (očekivana vrijednost, stvarna vrijednost);

3. Korištenje Java Streama

Drugi je pristup upotreba Java Stream API-ja. Stvorimo stream na ulazni set i nazovite findFirst () metoda za dobivanje prvog unosa:

Map.Entry actualValue = hashMap.entrySet () .stream () .findFirst () .get (); 
Map.Entry očekujeValue = nova AbstractMap.SimpleEntry (1, "B"); assertEquals (očekivana vrijednost, stvarna vrijednost);

4. Problem s redoslijedom umetanja

Da predstavimo ovaj problem, sjetimo se kako smo stvorili hashMap, par 5 = A je umetnut kao prvi unos, zatim 1 = B i konačno 2 = C. Provjerimo to ispisujući sadržaj našeg HashMap:

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

Kao što vidimo, naručivanje nije isto. The Razred HashMap implementacija ne jamči redoslijed umetanja.

Dodajmo sada još jedan element u hashMap:

hashMap.put (0, "D"); Iterator iterator = hashMap.entrySet (). iterator (); Map.Entry actualValue = iterator.next (); Map.Entry očekujeValue = nova AbstractMap.SimpleEntry (0, "D"); assertEquals (očekivana vrijednost, stvarna vrijednost);

Kao što vidimo, prvi se unos ponovno promijenio (u 0 = D u ovom slučaju). To također dokazuje da HashMap ne jamči redoslijed umetanja.

Tako, ako želimo sačuvati poredak, trebali bismo koristiti a LinkedHashMap umjesto toga:

Karta linkedHashMap = nova 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 očekujeValue = nova AbstractMap.SimpleEntry (5, "A"); assertEquals (očekivana vrijednost, stvarna vrijednost);

5. Zaključak

U ovom kratkom članku razgovarali smo o različitim pristupima za dobivanje prvog unosa iz HashMap.

Najvažnija stvar koju treba napomenuti je da HashMap implementacija ne garantira redoslijed umetanja. Dakle, ako smo zainteresirani za očuvanje redoslijeda umetanja, trebali bismo koristiti LinkedHashMap.

Primjer koda dostupan je na GitHubu.