Pour quoi on fait int + String dans la méthode hashCode?
Résolu
estrellas6
Messages postés
36
Date d'inscription
Statut
Membre
Dernière intervention
-
arthurg95 Messages postés 2421 Date d'inscription Statut Membre Dernière intervention -
arthurg95 Messages postés 2421 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
j'ai fait une recherche sur le net concernant ces deux notions mais j'ai toujours un problème avec leurs méthodes.
je suis en train de suivre le tutoriel de site du zéro et j'ai pas compris ce code :
public int hashCode() {
//On définit un multiplication impair, de préférence un nombre premier
//Ceci afin de garantir l'unicité du résultat final
final int prime = 31;
//On définit un résultat qui sera renvoyé au final
int result = 1;
//On ajoute en eux la multiplication des attributs et du multiplicateur
result = prime * result + categorie;
result = prime * result + nbreHabitants;
//Lorsque vous devez gérer des hashcodes avec des objets dans le mode de calcul
//Vous devez vérifier si l'objet n'est pas null, sinon vous aurez une erreur
result = prime * result + ((nomPays == null) ? 0 : nomPays.hashCode());
result = prime * result + ((nomVille == null) ? 0 : nomVille.hashCode());
return result;
}
On peut générer ce code automatiquement via le menu Source/Generate hashcode and equals.
Ce que j'ai pas compris est:
Pour quoi ce prime = 31 et result=1?
Et la question la plus importante est pour quoi ils font la somme d'un entier et un String
(int prime*result + String categorie) c'est quoi cette somme ?????????
et merci
j'ai fait une recherche sur le net concernant ces deux notions mais j'ai toujours un problème avec leurs méthodes.
je suis en train de suivre le tutoriel de site du zéro et j'ai pas compris ce code :
public int hashCode() {
//On définit un multiplication impair, de préférence un nombre premier
//Ceci afin de garantir l'unicité du résultat final
final int prime = 31;
//On définit un résultat qui sera renvoyé au final
int result = 1;
//On ajoute en eux la multiplication des attributs et du multiplicateur
result = prime * result + categorie;
result = prime * result + nbreHabitants;
//Lorsque vous devez gérer des hashcodes avec des objets dans le mode de calcul
//Vous devez vérifier si l'objet n'est pas null, sinon vous aurez une erreur
result = prime * result + ((nomPays == null) ? 0 : nomPays.hashCode());
result = prime * result + ((nomVille == null) ? 0 : nomVille.hashCode());
return result;
}
On peut générer ce code automatiquement via le menu Source/Generate hashcode and equals.
Ce que j'ai pas compris est:
Pour quoi ce prime = 31 et result=1?
Et la question la plus importante est pour quoi ils font la somme d'un entier et un String
(int prime*result + String categorie) c'est quoi cette somme ?????????
et merci
A voir également:
- Pour quoi on fait int + String dans la méthode hashCode?
- Int converter - Télécharger - Bureautique
- Dans le document à télécharger, léa a utilisé 2 méthodes différentes pour centrer le nom des continents. lesquels sont centrés correctement ? ✓ - Forum Javascript
- Méthode des tangentes excel ✓ - Forum Excel
- Centrer le nom des dossier ✓ - Forum Windows 10
- Int main(void) ✓ - Forum C++
4 réponses
Bonjour,
Le principe d'un Hash est qu'il y en ai le moins d'identique possible pour avoir une répartition dans les tables (hashtab) par exemple quasiment égale.
Pourquoi prime = 31 ? Parce que c'est un nombre premier, tu aurais pu aussi bien mettre 37 ;)
Cette somme ne correspond à rien de concret, c'est la définition du hash ;)
A mon avis ici il utilise sont hash pour la méthode compareTo(), afin de définir la différence entre 2 villes, elle ne sont égales si et seulement si categorie=categorie, nbrHabitant = nbrHabitant, ...
Ce hash donne un identifiant unique (en théorie) à ta ville.
Mais dans tous les cas, vérifie sur categorie est bien un string, car on ne peut pas faire la somme d'un int et d'un string ;)
Tout est dit, mais comme personne n'écoute il faut toujours répéter
Le principe d'un Hash est qu'il y en ai le moins d'identique possible pour avoir une répartition dans les tables (hashtab) par exemple quasiment égale.
Pourquoi prime = 31 ? Parce que c'est un nombre premier, tu aurais pu aussi bien mettre 37 ;)
Cette somme ne correspond à rien de concret, c'est la définition du hash ;)
A mon avis ici il utilise sont hash pour la méthode compareTo(), afin de définir la différence entre 2 villes, elle ne sont égales si et seulement si categorie=categorie, nbrHabitant = nbrHabitant, ...
Ce hash donne un identifiant unique (en théorie) à ta ville.
Mais dans tous les cas, vérifie sur categorie est bien un string, car on ne peut pas faire la somme d'un int et d'un string ;)
Tout est dit, mais comme personne n'écoute il faut toujours répéter
merci beaucoup c'est très gentil.
Si j'ai bien compris, on ne peut pas deviner result vaut combien c'est ça ?
Si j'ai bien compris, on ne peut pas deviner result vaut combien c'est ça ?