In base a this blog entry, HashMap reinvia la propria implementazione di hashCode()
(denominata hash()
) su un codice hash già recuperato.Perché e in che modo HashMap ha la propria implementazione interna di hashCode() chiamata hash()?
Se la chiave non è nullo, allora, esso chiamerà hashfunction sull'oggetto chiave, vedere linea 4 in metodo sopra cioè key.hashCode(), quindi dopo key.hashCode() restituisce hashValue, riga 4 assomiglia
int hash = hash (hashValue)
e ora, si applica tornato hashValue nella propria funzione di hashing.
Ci si potrebbe chiedere perché stiamo nuovamente calcolando l'hashvalue usando hash (hashValue). La risposta è, difende dalle funzioni di hash> di scarsa qualità.
Può hashmap accuratamente codici hash Riassegna? HashMap può memorizzare oggetti, ma non ha accesso alla logica che assegna a hashCode i suoi oggetti. Ad esempio, hash()
non potrebbe forse integrano la logica dietro la hashCode()
attuazione seguente:
public class Employee {
protected long employeeId;
protected String firstName;
protected String lastName;
public int hashCode(){
return (int) employeeId;
}
}
Eventuali duplicati di [intesa strana funzione Java hash] (http://stackoverflow.com/questions/9335169/understanding-strange-java-hash-function) – Nayuki
@NayukiMinase Indovina la realizzazione di 'hash()' è cambiato nel tempo, poiché la versione 1.8.0_51 è diversa/più semplice (vedi la mia risposta). – Andreas