Ich erinnere mich an Eclipse und Idee haben diese Vorlage, um automatisch einen HashCode eines Objekts basierend auf seinen Attributen erstellen.Create Hash von String und int
Eine der Strategien, wenn eine Zahl und ein String verwendet wird, ist etwa so.
return stringValue.hashCode() + intValue * 32;
Ooor etwas wie das.
Ich habe noch keine Eclipse oder Idee zur Hand und ich möchte eine solche Funktion erstellen.
EDIT
Basierend auf den Antworten, die ich diese Mini-Klasse ist
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;
}
}
Diese Klasse erstellen als Schlüssel für eine große Speicherkarte verwendet werden (> 10k Elemente) Ich glaube nicht, Ich möchte sie jedes Mal wiederholen, um herauszufinden, ob String und int identisch sind.
Vielen Dank.
PS .. mmh wahrscheinlich sollte es Namen StringIntKey sein.
Oscar, ich denke, das ist eine gute Klasse. Die Methode hashCode ist klar, zuverlässig und performant. Wie verhindert man, dass die Zeichenfolge null ist? Werfen Sie in Ihrem Konstruktor eine NPE, wenn es NULL ist. Dann könnten Sie diese Null-Wächter in equals und hashCode entfernen. Schließlich halten Sie eine Kopie von "Effektives Java" praktisch für Fragen wie diese. Die von Eclipse und IDEA erstellten hashCode-Methoden basieren auf diesem Buch. –
In Ihrer equals-Methode sollte die Zeichenkette use = anstelle von == verglichen werden. –