Je me souviens qu'eclipse et idea ont ce modèle pour créer automatiquement le hashCode d'un objet en fonction de ses attributs.Créer un hachage à partir de string et int
L'une des stratégies si un nombre et une chaîne est utilisée est quelque chose comme ceci.
return stringValue.hashCode() + intValue * 32;
Ooor quelque chose comme ça.
Je n'ai ni éclipse ni idée à portée de main et j'aimerais créer une telle fonction.
EDIT
Sur la base des réponses que je crée ce mini-classe
class StringInt {
private final String s;
private final int i;
static StringInt valueOf(String string , int value) {
return new StringInt(string, value);
}
private StringInt(String string, int value) {
this.s = string;
this.i = value;
}
public boolean equals(Object o) {
if(o != null && o instanceof StringInt){
StringInt other = (StringInt) o;
return this.s == other.s && this.i == other.i;
}
return false;
}
public int hashCode() {
return s != null ? s.hashCode() * 37 + i : i;
}
}
Cette classe doit être utilisé comme clé pour une grande carte mémoire (> 10k éléments) Je ne suis pas vouloir les parcourir chaque fois pour trouver si le String et l'int sont les mêmes.
Merci.
ps .. mmh probablement les noms StringIntKey.
Oscar, je pense que c'est une bonne classe. La méthode hashCode est claire, fiable et performante. Qu'en est-il de la prévention d'une chaîne nulle? Dans votre constructeur, lancez un NPE s'il est nul. Ensuite, vous pouvez supprimer ces gardes nuls dans equals et hashCode. Enfin, gardez une copie de "Java efficace" à portée de main pour les questions comme celles-ci. Les méthodes hashCode créées par Eclipse et IDEA sont basées sur ce livre. –
Dans votre méthode égale, vous devez comparer l'utilisation de la chaîne à la place de ==. –