HashMap autorise une clé nulle et n'importe quel nombre de valeurs nulles. Quelle est l'utilisation de celui-ci?Quelle est l'utilité d'ajouter une clé ou une valeur nulle à une HashMap en Java?
Répondre
Je ne suis pas sûr de ce que vous demandez, mais si vous cherchez un exemple quand on voudrait utiliser une clé nulle, je les utilise souvent dans les cartes pour représenter le cas par défaut (la valeur qui devrait être utilisé si une clé donnée n'est pas présent):
Map<A, B> foo;
A search;
B val = foo.containsKey(search) ? foo.get(search) : foo.get(null);
HashMap
poignées clés null spécialement (car il ne peut pas appeler .hashCode()
sur un objet nul), mais les valeurs nulles ne sont pas quelque chose de spécial, ils « re stocké dans la carte comme toute autre chose
Donc, si .hashCode() n'est pas possible sur null qui décide quel chariot la clé null va entrer? – Pacerier
@Pacerier Il existe une méthode spéciale dans 'HashMap' (' putForNullKey') qui le gère; il le stocke dans la table 0 –
@MichaelMrozek votre dernière ligne 'B val = foo.containsKey (recherche)? foo.get (recherche): foo.get (null); ' Je pense que nous pouvons simplement appeler la méthode get sur la clé de recherche qui aura le même résultat. 'B val = foo.get (recherche);' pourriez-vous s'il vous plaît me corriger si je reçois quelque chose de mal? – dheerajraaj
Un exemple serait pour les arbres de modélisation. Si vous utilisez une HashMap pour représenter une structure arborescente, où la clé est le parent et la valeur est la liste des enfants, les valeurs de la clé null
sont les nœuds racine.
Voici mon exemple seulement-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<String, Long> START_TIMES = new HashMap<String, Long>();
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(String 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(String name) {
if (! START_TIMES.containsKey(name)) {
return 0;
}
return printTimer(name, START_TIMES.remove(name), System.currentTimeMillis());
}
private static long printTimer(String name, long start, long end) {
LOG.info(name + " timer ran for " + (end - start) + "ms");
return end - start;
}
}
Si vous essayez d'arrêter un temporisateur inexistant, ou un qui a été arrêté déjà, cela devrait être une erreur, pas ignoré. –
@QPaysTaxes - Dépend de votre intention. Si vous voulez un utilitaire léger qui peut être facilement utilisé, vous ne voulez généralement pas jeter d'Exception. De plus, ce n'est pas comme si l'on essayait d'arrêter une minuterie inexistante ou déjà arrêtée. – aroth
Un autre exemple: je l'utilise pour groupe de données par date. Mais certaines données n'ont pas de date. Je peux le regrouper avec l'en-tête "NoDate"
Les réponses à ce jour ne considèrent que la valeur d'avoir une clé null
, mais la question pose également à propos de any number of null values
. L'avantage de stocker la valeur null
contre 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 chaîne ""), et ne pas avoir une valeur du tout (null).
Un exemple d'utilisation pour null
valeurs est l'utilisation d'un HashMap
comme un cache pour les résultats d'une opération coûteuse (comme un appel à un service Web externe) qui peut revenir null
.
Attribuer une valeur null
sur la carte vous permet alors de distinguer entre le cas où l'opération n'a pas été effectuée pour une clé donnée (cache.containsKey(someKey)
rendement false
), et où l'opération a été réalisée, mais a retourné une valeur null
(cache.containsKey(someKey)
renvoie true
, cache.get(someKey)
renvoie null
).
Sans les valeurs null
, vous devez soit mettre une valeur spéciale dans le cache pour indiquer une réponse null
, soit simplement ne pas mettre en cache cette réponse et effectuer l'opération à chaque fois.
Une clé null peut également être utile lorsque les données carte stocke pour les sélections de l'interface utilisateur où la clé de carte représente un champ de haricots.
Une valeur de champ nul correspondant serait par exemple être représenté par « (s'il vous plaît sélectionner) » dans la sélection de l'interface utilisateur.
- 1. Rechercher une valeur pour une clé donnée dans une HashMap
- 2. HashMap: obtenir une liste de clés ou une valeur
- 3. Convertir une chaîne JSON en objet Java ou HashMap
- 4. Ajouter une valeur nulle à une valeur Varchar
- 5. itération sur une HashMap de HashMaps en Java (ou Scala)
- 6. Java HashMap détecter une collision
- 7. SPSiteDataquery renvoyant une valeur nulle
- 8. champ keySet dans HashMap est nulle
- 9. F # comment revenir ont une valeur nulle ou un tuple
- 10. excelApp.CreateDispatch() retourne une valeur nulle: l'échec
- 11. si une valeur du contrôleur est nulle, comment afficher 0?
- 12. est HashSet est implémenté via une instance HashMap
- 13. pourquoi attribuer d'abord une valeur nulle ou une autre valeur par défaut?
- 14. Constructeur PHP pour renvoyer une valeur nulle
- 15. Comment créer votre propre HashMap en Java?
- 16. Sélectionner tout le nouvel enregistrement mot-clé distinct avec une valeur non nulle dans une colonne
- 17. Est-ce que HashMap fournit une correspondance biunivoque?
- 18. Quelle est la "méthode ruby" pour analyser une chaîne pour une seule clé/valeur?
- 19. Filtre NSFetchedResultsController pour une valeur nulle?
- 20. NHibernate - propriété non-nulle référence une valeur
- 21. MYSQL/PHP Comment insérer une valeur nulle?
- 22. JPopupMenu getParent() retourne une valeur nulle?
- 23. Est-ce que "Context.User" peut être une valeur nulle?
- 24. La méthode NotesSession.GetDataBase renvoie une valeur nulle
- 25. Mapping contenu CORDE paires clé/valeur à un HashMap
- 26. Sous-requête linq renvoyant une valeur nulle
- 27. ce qui est mieux, jeter une exception ou retourner la valeur non nulle?
- 28. AVAudioPlayer isPlaying retourne toujours une valeur nulle
- 29. Comment attribuer une valeur nulle à une variable cachée en javascript?
- 30. Une méthode Java simple pour passer des parties d'un hashmap à un autre hashmap?
« Peut-être que le problème est que rien ne nous embête, mais que nous dérangent il. » Dans – bmargulies
goyave, collections Google, de nombreuses classes ne permettent pas nulle et le raisonnement derrière cela est que 95% des cas, ne pas besoin nul et ils peuvent représenter des bugs, potentiellement difficiles à trouver. – stivlo
Chose étrange, 'ConcurrentHashMap' ne supporte pas les clés NULL, alors que 'HashMap' le fait. – codepleb