Lisez le Java HashMap code source et lisez hash Confirmé que la comparaison clé est effectuée avec equals ()
.
/**
* Implements Map.get and related methods.
*
* @param hash hash for key
* @param key the key
* @return the node, or null if none
*/
final Node<K,V> getNode(int hash, Object key) {
Node<K,V>[] tab; Node<K,V> first, e; int n; K k; //Réseau interne
if ((tab = table) != null && (n = tab.length) > 0 &&
(first = tab[(n - 1) & hash]) != null) { //De la baie interne(hashCode/Reste de la longueur de la séquence)Le deuxième élément stocké(Premier nœud dans LinkedList)
if (first.hash == hash && // always check first node
((k = first.key) == key || (key != null && key.equals(k))))
return first;
if ((e = first.next) != null) {
if (first instanceof TreeNode)
return ((TreeNode<K,V>)first).getTreeNode(hash, key);
do { //Recherchez la liste liée une par une
if (e.hash == hash && //Si le hashCode est différent, passez au nœud suivant(objectif d'optimisation)
((k = e.key) == key || (key != null && key.equals(k)))) //Ici égale()Comparer avec!!!!!!
return e;
} while ((e = e.next) != null);
}
}
return null;
}
Il a été confirmé que l'objet recherché et l'objet avec la clé de chaque nœud de la LinkedList recherché ont été comparés pour obtenir le consentement en utilisant leurs égaux respectifs ().
tab [(n -1) & hash]
est (hashCode / reste de la longueur du tableau)Recommended Posts