Quelle exception est lancée lorsqu'on essaie d'accéder à un élément avec une clé qui n'existe pas dans une HashMap ?

Comprendre l'exception NoSuchElementException en Java

Lorsqu'on essaie d'accéder à un élément d'une HashMap en utilisant une clé qui n'existe pas, Java lance une exception de type NoSuchElementException. Cette exception est généralement rencontrée lors de l'utilisation de l'itérateur de la collection.

Qu'est-ce qu'une NoSuchElementException?

En Java, l'exception NoSuchElementException est lancée quand on tente de récupérer un élément d’une collection alors que cette dernière est vide. Cette exception appartient à java.util package.

import java.util.HashMap; 
import java.util.Map; 

public class Main {
   public static void main(String[] args) {
      Map<String, Integer> numbers = new HashMap<>();
      System.out.println(numbers.get("un"));   // Returns null, not NoSuchElementException
   }
}

Dans cet exemple, aucune exception n’est lancée bien que la clé "un" n'existe pas dans la HashMap. En fait, la méthode get() retourne null si la clé spécifiée n'existe pas dans la HashMap.

Où rencontre-t-on généralement l'exception NoSuchElementException?

L'exception NoSuchElementException est couramment rencontrée lors de l'utilisation de la méthode next() de l'itérateur sans vérifier au préalable si un autre élément est disponible à l'aide de la méthode hasNext().

import java.util.HashMap; 
import java.util.Iterator; 
import java.util.Map; 

public class Main {
   public static void main(String[] args) {
      Map<String, Integer> numbers = new HashMap<>();
      Iterator<String> it = numbers.keySet().iterator();

      System.out.println(it.next());  // Throws NoSuchElementException
   }
}

Dans cet exemple, l'exception NoSuchElementException est lancée car la méthode next() est appelée alors que la HashMap est vide et ne contient donc aucun élément à retourner.

Bonnes pratiques

Pour éviter l'exception NoSuchElementException, une bonne pratique est de toujours vérifier s'il y a un élément suivant dans la collection avant d'appeler la méthode next() de l'itérateur.

import java.util.HashMap; 
import java.util.Iterator; 
import java.util.Map; 

public class Main {
   public static void main(String[] args) {
      Map<String, Integer> numbers = new HashMap<>();

      Iterator<String> it = numbers.keySet().iterator();
      while (it.hasNext()) {
          System.out.println(it.next());
      }
   }
}

Dans cet exemple, la boucle while vérifie avec hasNext() s'il y a un autre élément dans la HashMap avant d'appeler next(). De cette façon, on s'assure de ne pas provoquer une NoSuchElementException.

En résumé, il est important de comprendre les exceptions en Java et de suivre de bonnes pratiques pour éviter de rencontrer des exceptions non désirées telles que NoSuchElementException.

Trouvez-vous cela utile?