Pourquoi ne Hashtable pas prendre la valeur null clé?
Pourquoi ne Hashtable ne pas prendre un null
clé?
Aussi pourquoi ne HashMap permettre null
clés?
Quel est le but de la prise de ces deux classes de Clé de comportement si différent?
Eh bien, cela pourrait répondre à ta question: stackoverflow.com/questions/40471/java-hashmap-vs-hashtable
Si vous regardez dans les
Si vous regardez dans les
AbstractMap
vous verrez ici et là que les clés NULL sont spécialement traitées. Vous pouvez utiliser les clés null dans Hashtable
si vous enveloppez-les dans des objets (NullKey
) et de les traiter spécialement.OriginalL'auteur BOSS | 2011-09-26
Vous devez vous connecter pour publier un commentaire.
De la
Hashtable
JavaDoc:En un mot, depuis
null
n'est pas un objet, vous ne pouvez pas appeler.equals()
ou.hashCode()
sur elle, de sorte que leHashtable
ne peut pas calculer une valeur de hachage à utiliser comme une clé.HashMap
est plus récente, et a plus de fonctionnalités avancées, qui sont fondamentalement juste une amélioration sur leHashtable
fonctionnalité. Ainsi, lors de laHashMap
a été créé, il a été spécialement conçu pour gérernull
valeurs clés et les traite comme un cas spécial.Plus précisément, l'utilisation de
null
clé est traitée comme cela lors de la délivrance d'un.get(key)
:Je n'ai pas dit qu'il en fait est un wrapper autour de
Hashtable
, mais plutôt qu'il a enveloppé le même fonctionnalités, puisque c'est ceHashtable
et plus encore.Alors, quand vous avez dit 'wrap' vous n'avez pas dire 'wrap'. Peut-être que tu veux dire "mettre en œuvre" ou "de fournir".
Oui, vous avez raison. "wrap" est un mauvais mot à utiliser. J'ai mis à jour ma réponse afin de mieux refléter ce que je voulais dire, ainsi que de la réalité.
pour le dire en un mot "le hashcode de la clé est calculée à l'aide de la clé hashcode(classes clés hashcode) dans la table de hachage et hashmap du hashcode dans hashmap"
OriginalL'auteur cdeszaq
C'est juste un détail d'implémentation.
Hashtable
est le plus vieux de la classe, et son utilisation est généralement déconseillée. Peut-être qu'ils ont vu la nécessité d'une clé null, et plus important encore, les valeurs null, et de l'ajouter dans leHashMap
mise en œuvre.null
valeurs dans une classe de l'interface externe d'un détail d'implémentation, mais je suis d'accord qu'il s'agissait probablement d'un oubli de la conception pourHashTable
qui a été corrigé dansHashMap
.Le
Map
interface ne dit rien denull
valeurs, de sorte que chaque mise en œuvre peut choisir 🙂OriginalL'auteur Bozho
Table de hachage est antérieure à l'collections cadre, et faisait partie du JDK 1.0. À l'époque, null clés étaient probablement pas considéré comme utile ou pas essentiel, et ont donc été interdit. Vous pouvez voir cela comme une erreur de conception, tout comme le choix du nom
Hashtable
plutôt queHashTable
.Puis, quelques années plus tard, est venu à l'collections de cadre, et de la table de hachage a été légèrement modifié pour tenir dans le cadre. Mais le comportement sur les clés null n'a pas été modifiés de façon à maintenir la compatibilité ascendante.
Table de hachage doit être désapprouvée, à mon humble avis.
OriginalL'auteur JB Nizet
Je vais vous laisser savoir comment la hashmap stocke les objets en interne:
HashMap stocke les valeurs par le biais de put(clé,valeur) et obtient les valeurs thorugh
get(key)
. Le processus suit le concept de Hachage.Quand nous disons
put(key,value)
- InternehashCode()
pour la clé est calculé et pris comme entrée pour lahashfunction()
de trouver le seau emplacement pour le stockage.En cas de Collision lors du calcul de la
hashcode()
il peut y avoir une possibilité que la clé est différente mais lehashcode()
est même, à l'époque, après avoir trouvé le seau de l'emplacement de stockage est fait dans la liste chaînée. Veuillez Noter que bien que le stockage de la Carte.Entrée à la fois la clé-valeur est stockée.Lors de l'Extraire de la valeur grâce à une clé est fait, alors si lors de la collision où la clé du hashcode() peut-être même, alors la valeur est récupéré si
equals()
fonction pour trouver le désiré valeur de clé.Ce qui concerne,
Anand
OriginalL'auteur Anand Builders
En plus de tous les détails donnés dans d'autres réponses, c'est comment hashmap autoriser les valeurs NULL Clés. Si vous regardez la méthode
putForNullKey()
dans Hashmap (JDK 5) , il se réserve l'indice "0" pour la clé null. Toutes les valeurs pour la clé null sont conservés à l'intérieur de l' "0" index du tableau.Il n'y a rien de spécial à propos de stocker la valeur NULL comme tous les mettre et les opérations de recherche de travail en fonction de la Clé de l'objet.
Dans la table de hachage, Java n'a pas de ces mécanismes, et donc à la table de hachage ne prend pas en charge NULL clés ou des valeurs.
OriginalL'auteur java_mouse
Ils sont deux classes distinctes pour deux choses différentes. Aussi, à la table de hachage est synchronisé. HashTable aussi est venu avant que la table de hachage, alors, naturellement, il serait moins avancés. Il n'a probablement pas de sens pour générer une valeur null hashcode au début de Java.
OriginalL'auteur Ian Macalinao