Ottieni la prima chiave e valore da una HashMap

1. Panoramica

In questo tutorial, discuteremo come ottenere la prima coppia chiave-valore da una HashMap senza conoscere la chiave.

Innanzitutto, utilizzeremo un iteratore e quindi uno stream per ottenere la prima voce. Infine, discuteremo un problema che HashMap presenta quando vogliamo ottenere la prima voce e come risolverlo.

2. Utilizzo di un iteratore

Consideriamo di avere la seguente HashMap :

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

In questo esempio, utilizzeremo un iteratore per ottenere la prima coppia chiave-valore. Quindi, creiamo un iteratore sul set di voci di HashMap e chiamiamo il metodo next () per recuperare la prima voce:

Iterator
    
      iterator = hashMap.entrySet().iterator(); Map.Entry actualValue = iterator.next(); Map.Entry expectedValue = new AbstractMap.SimpleEntry(1, "B"); assertEquals(expectedValue, actualValue);
    

3. Utilizzo di un flusso Java

Un altro approccio consiste nell'utilizzare l'API Java Stream. Creiamo un flusso sul set di voci e chiamiamo il metodo findFirst () per ottenere la sua prima voce:

Map.Entry actualValue = hashMap.entrySet() .stream() .findFirst() .get(); 
Map.Entry expectedValue = new AbstractMap.SimpleEntry(1, "B"); assertEquals(expectedValue, actualValue);

4. Problema con l'ordine di inserzione

Per presentare questo problema, ricordiamo come abbiamo creato HashMap , la coppia di 5 = A è stato inserito come prima voce, quindi 1 = B e infine 2 = C . Controlliamolo stampando il contenuto della nostra HashMap :

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

Come possiamo vedere, l'ordinazione non è la stessa. L' implementazione della classe HashMap non garantisce l'ordine di inserzione .

Aggiungiamo ora un altro elemento a hashMap :

hashMap.put(0, "D"); Iterator
    
      iterator = hashMap.entrySet().iterator(); Map.Entry actualValue = iterator.next(); Map.Entry expectedValue = new AbstractMap.SimpleEntry(0, "D"); assertEquals(expectedValue, actualValue);
    

Come possiamo vedere, la prima voce è cambiata di nuovo (a 0 = D in questo caso). Ciò dimostra anche che HashMap non garantisce un ordine di inserzione.

Quindi, se vogliamo preservare l'ordine, dovremmo usare invece una LinkedHashMap :

Map linkedHashMap = new 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 expectedValue = new AbstractMap.SimpleEntry(5, "A"); assertEquals(expectedValue, actualValue);
    

5. conclusione

In questo breve articolo, abbiamo discusso diversi approcci per ottenere la prima voce da una HashMap .

Il punto più importante da notare è che l' implementazione di HashMap non garantisce alcun ordine di inserimento. Quindi, se siamo interessati a preservare l'ordine di inserzione, dovremmo usare una LinkedHashMap .

L'esempio di codice è disponibile su GitHub.