Quelle est l’utilité d’append une clé ou une valeur null à un HashMap en Java?

HashMap autorise une clé NULL et un nombre quelconque de valeurs NULL. A quoi ça sert?

Je ne suis pas sûr de ce que vous demandez, mais si vous cherchez un exemple d’utilisation d’une clé null, je les utilise souvent dans les maps pour représenter le cas par défaut (c’est-à-dire la valeur à utiliser). si une clé donnée n’est pas présente:

 Map foo; A search; B val = foo.containsKey(search) ? foo.get(search) : foo.get(null); 

HashMap gère les clés NULL spécialement (car il ne peut pas appeler .hashCode() sur un object nul), mais les valeurs NULL ne sont pas quelque chose de spécial, elles sont stockées dans la carte comme n’importe quoi d’autre

Un exemple serait pour la modélisation des arbres. Si vous utilisez un HashMap pour représenter une arborescence, où la clé est le parent et la valeur la liste des enfants, les valeurs de la clé null seraient les nœuds racine.

Un exemple d’utilisation des valeurs null est l’utilisation d’un HashMap comme cache pour les résultats d’une opération coûteuse (comme un appel à un service Web externe) pouvant renvoyer null .

Mettre une valeur null dans la carte vous permet ensuite de distinguer le cas où l’opération n’a pas été effectuée pour une clé donnée ( cache.containsKey(someKey) renvoie false ) et où l’opération a été effectuée mais a renvoyé une valeur null ( cache.containsKey(someKey) renvoie true , cache.get(someKey) renvoie null ).

Sans valeurs null , vous devez soit mettre une valeur spéciale dans le cache pour indiquer une réponse null , soit ne pas mettre la réponse en cache et effectuer l’opération à chaque fois.

Jusqu’à présent, les réponses ne prennent en compte que la valeur d’avoir une clé null , mais la question concerne également any number of null values .

L’avantage de stocker la valeur null sur une clé dans un HashMap est le même que dans les bases de données, etc. – vous pouvez enregistrer une distinction entre avoir une valeur vide (par exemple ssortingng “”) et ne pas avoir de valeur du tout (null ).

Voici mon seul exemple un peu artificiel d’un cas où la clé null peut être utile:

 public class Timer { private static final Logger LOG = Logger.getLogger(Timer.class); private static final Map START_TIMES = new HashMap(); public static synchronized void start() { long now = System.currentTimeMillis(); if (START_TIMES.containsKey(null)) { LOG.warn("Anonymous timer was started twice without being stopped; previous timer has run for " + (now - START_TIMES.get(null).longValue()) +"ms"); } START_TIMES.put(null, now); } public static synchronized long stop() { if (! START_TIMES.containsKey(null)) { return 0; } return printTimer("Anonymous", START_TIMES.remove(null), System.currentTimeMillis()); } public static synchronized void start(Ssortingng name) { long now = System.currentTimeMillis(); if (START_TIMES.containsKey(name)) { LOG.warn(name + " timer was started twice without being stopped; previous timer has run for " + (now - START_TIMES.get(name).longValue()) +"ms"); } START_TIMES.put(name, now); } public static synchronized long stop(Ssortingng name) { if (! START_TIMES.containsKey(name)) { return 0; } return printTimer(name, START_TIMES.remove(name), System.currentTimeMillis()); } private static long printTimer(Ssortingng name, long start, long end) { LOG.info(name + " timer ran for " + (end - start) + "ms"); return end - start; } } 

Autre exemple: je l’utilise pour regrouper les données par date. Mais certaines données n’ont pas de date. Je peux le regrouper avec l’en-tête “NoDate”

Une clé vide peut également être utile lorsque la carte stocke des données pour les sélections d’interface utilisateur, lorsque la clé de mappage représente un champ bean.

Une valeur de champ nul correspondante serait par exemple représentée par “(veuillez sélectionner)” dans la sélection de l’interface utilisateur.