私はEclipseとアイデアが、その属性に基づいてオブジェクトのhashCodeを自動的に作成するこのテンプレートを持っていることを覚えています。文字列とintからハッシュを作成する
数値と文字列を使用する場合の戦略の1つは、このようなものです。
return stringValue.hashCode() + intValue * 32;
このようなものはありません。
私は日食も考えも持っていないので、このような機能を作りたいと思います。私は、このクラスは、大容量メモリ・マップ(> 10K要素)のためのキーとして使用されることになるこのミニクラスに
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;
}
}
を作成する回答に基づいて
EDIT
私にはありません文字列とintが同じかどうかを見つけるたびにそれらを繰り返したいと思う。
ありがとうございます。
ps .. mmhおそらく名前はStringIntKeyである必要があります。
オスカー、私は良いクラスだと思います。 hashCodeメソッドは、明確で、信頼性が高く、実行可能です。 文字列がヌルにならないようにするにはどうすればよいですか?あなたのコンストラクタで、nullの場合はNPEをスローします。その後、equalsおよびhashCodeでnullガードを削除できます。 最後に、このような質問には「効果的なJava」のコピーを用意してください。 EclipseとIDEAによって作成されたhashCodeメソッドは、その本をベースにしています。 –
equalsメソッドで、==の代わりに文字列use equalsを比較する必要があります。 –