Je passe par la classe HashMap en Java. Ma compréhension est que la capacité de table de hachage est 2 à la puissance du nombre de seaux (capacité 16 signifie quatre seaux). Lorsque put (key, value) est appelé, key.hashCode() renvoie un nombre entier et cette paire nouvellement ajoutée (clé, valeur) est placée en fonction du nombre de buckets key.hashCode()%. Mais ce qui suit est la mise en œuvre effective dans HashMap.classhash() implémentation en java
static final int hash(Object key) {
int h;
return (key == null) ? 0 : (h = key.hashCode())^(h >>> 16);
}
À partir du code ci-dessus, je ne suis pas en mesure de comprendre comment la mise en place de la valeur key.hashCode() dans des seaux se produisent.
J'avais parcouru le lien que vous avez joint auparavant (dans hashmap.class). Pourriez-vous s'il vous plaît élaborer sur le "ça" juste "étale la partie" hashcode ". – AV94
Ma conjecture est, que c'est une optimisation pour smallash (<2^16 entrées) HashMaps. Si vous ne diffusiez pas les bits supérieurs, ils seraient complètement ignorés dans ces cartes. –
Ok, un peu plus clair maintenant. Je suppose que lorsque la valeur de hachage est plus que le nombre de seaux, (n-1) & hash vous donne juste le reste. – AV94