4 votes

Une fonction de hachage efficace

J'ai un Employee avec de nombreux attributs. L'un de ces attributs est employeeId qui est de type int .

Puis-je avoir une fonction hascode pour Employee comme suit ?

int hashCode(){
    return new Integer(employeeId).hashCode();
}

Est-il efficace ?

17voto

Mark Byers Points 318575

Pourquoi pas :

return employeeId;

2voto

wds Points 9910

La seule exigence pour hashCode() est que les valeurs qu'il renvoie sont suffisamment uniques et que deux instances d'Employé qui sont égales selon la méthode equals() ont le même code de hachage. Donc en retournant employeeId est le meilleur choix dans ce cas.

Pour répondre à la question initiale, non, ce n'est pas très efficace. La nouvelle construction d'objet vous donnera une très petite baisse de performance si vous faites beaucoup d'appels, bien que le compilateur (et les implémentations qui utilisent le code de hachage) puisse être assez intelligent pour optimiser une partie de cela. Bien sûr, vous ne le constaterez que si vous en faites un usage intensif, ce qui n'est généralement pas le cas.

2voto

Stephen C Points 255558

Si employeeId est vraiment de type int alors cela devrait fonctionner, et c'est considérablement plus efficace que votre version ... qui crée un fichier Integer sans raison valable :

public int hashCode() {
    return employeeId;
}

Si employeeId est un entier représenté sous la forme d'une chaîne de caractères, alors la solution suivante pourrait être meilleure que votre version.

public int hashCode() {
    return Integer.parseInt(employeeId);
}

Toutes ces solutions (y compris la vôtre) supposent que employeeId est une clé unique, c'est-à-dire qu'il n'y a pas deux employés (et leurs numéros d'identification correspondants) qui ont une clé unique. Employee objets) ont le même employeeId valeur.

2voto

Jerry Coffin Points 237758

Je me méfierais un peu d'un retour à l'état brut. EmployeeID s. Selon l'entreprise, cela peut facilement conduire à des regroupements. Une tendance évidente est que lorsque les choses vont bien, les entreprises embauchent beaucoup de personnes. Puis, lorsque les choses ne vont pas aussi bien, elles licencient, en grande partie dans l'ordre inverse de l'ancienneté. Puis, lorsque les choses reprennent, ils embauchent à nouveau plus de personnes.

Cela signifie que vous tendent d'avoir des parcours relativement denses en population alternant avec des parcours relativement peu peuplés. Même si vous avez rempli les conditions pour que le hachage fonctionne et que vous avez généré un code de hachage très rapidement, les performances d'une table de hachage de ces éléments peuvent être affectées.

1voto

Mercy Points 77

Non, ce n'est pas efficace.

Un nouvel objet sera créé lorsqu'un client invoquera cette fonction hashCode().

Votre employeeId est un type int, il suffit de le retourner, il n'est pas nécessaire de créer un nouvel objet Integer.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X