Obtenir la première clé et la première valeur d'un HashMap

1. Vue d'ensemble

Dans ce didacticiel, nous verrons comment obtenir la première paire clé-valeur à partir d'un HashMap sans connaître la clé.

Tout d'abord, nous allons utiliser un itérateur, puis un flux pour obtenir la première entrée. Enfin, nous discuterons d'un problème présenté par HashMap lorsque nous voulons obtenir la première entrée et comment le résoudre.

2. Utilisation d'un itérateur

Considérons que nous avons le HashMap suivant :

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

Dans cet exemple, nous allons utiliser un itérateur pour obtenir la première paire clé-valeur. Alors, créons un itérateur sur le jeu d' entrées du HashMap et appelons la méthode next () pour récupérer la première entrée:

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

3. Utilisation d'un flux Java

Une autre approche consiste à utiliser l'API Java Stream. Créons un flux sur l' ensemble d'entrées et appelons la méthode findFirst () pour obtenir sa première entrée:

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

4. Problème avec l'ordre d'insertion

Pour présenter ce problème, souvenons -nous comment nous avons créé hashmap , la paire 5 = A a été inséré comme la première entrée, puis 1 = B et enfin 2 = C . Vérifions cela en imprimant le contenu de notre HashMap :

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

Comme on peut le voir, la commande n'est pas la même. L' implémentation de la classe HashMap ne garantit pas l'ordre d'insertion .

Ajoutons maintenant un élément supplémentaire à 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);
    

Comme nous pouvons le voir, la première entrée a de nouveau changé (à 0 = D dans ce cas). Cela prouve également que HashMap ne garantit pas un ordre d'insertion.

Donc, si nous voulons conserver l'ordre, nous devrions utiliser un LinkedHashMap à la place :

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. Conclusion

Dans ce court article, nous avons discuté de différentes approches pour obtenir la première entrée à partir d'un HashMap .

Le point le plus important à noter est que l' implémentation de HashMap ne garantit aucun ordre d'insertion. Donc, si nous voulons préserver l'ordre d'insertion, nous devrions utiliser un LinkedHashMap .

L'exemple de code est disponible à l'adresse over sur GitHub.