編集:セット全体で1文字だけが必要だというあなたのコメントを読みました-これは非常に奇妙な要件のように聞こえますが、基本的には次のようなもので満たされます:
public final class FirstChar {
private final char c;
public FirstChar(char c) {
this.c = c;
}
@Override public int hashCode() {
return 0;
}
@Override public boolean equals(Object other) {
return other instanceof FirstChar;
}
}
言い換えれば、 のすべてのインスタンスはFirstChar
他のすべてのインスタンスと等しいと見なされ、それらはすべて同じハッシュ コードを持ちます。私が言うように、これは本当に奇妙です.それは本当にあなたが望むものですか?
元の答え
論理的に 1 文字しか持たない値の実装hashCode()
は簡単です。
@Override
public int hashCode() {
return c; // Use implicit conversion to int
}
のコントラクトを確認すると、Object.hashCode
これが正常に機能することがわかります。equals
メソッドが基本的に の値を比較するだけであると仮定しますc
。(「セット内に要素を 1 つだけ持つことができる方法で」と書いたときの意味は明確ではありません。異なる文字ごとに 1 つの要素のみを意味していると思います。)
FirstChar
ただし、を使用するだけでクラスが提供する価値については混乱していますjava.lang.Character
。だけを使用できない理由はありますSet<Character>
か?