さまざまな列挙型 (さまざまな型) を含むクラスがあります。このクラスは のキーとして使用されますHashMap
。クラス hashCode は現在、次のように実装されています。
public static class Key implements Comparable<Key> {
final int a;
final Enum1 enum1;
final Enum2 enum2;
@Override
public int hashCode() {
return a ^ enum1.hashCode() ^ enum2.hashCode();
}
// ... definition of equals and toString ...
}
enums hashCode が enum の定義で enum 値のインデックスを返すだけの場合、これは最適ではありません (衝突が多すぎます)。のメソッド定義Enum.hashCode()
は次のとおりです。
/**
* Returns a hash code for this enum constant.
*
* @return a hash code for this enum constant.
*/
public final int hashCode() {
return super.hashCode();
}
これが にデリゲートすると仮定するとObject.hashCode()
、すべての enum 定数に対して 1 つのインスタンスしか存在せずObject.hashCode()
、理論的にはオブジェクトの内部アドレスから派生した整数のようなものになるため、すべて問題ありません。私は正しいですか?
PS: もちろん、同じ列挙型がキーで複数回使用される場合は、より複雑なものを使用する必要があります。