如何在Java中计算枚举的哈希码,以及如何将枚举哈希代码组合在一起作为HashMap的键
我有一个包含不同枚举(不同类型)的类。此类用作 的键。类哈希码当前实现如下:HashMap
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 ...
}
现在,如果枚举哈希码只返回枚举定义中枚举值的索引,这将不是最佳的(冲突太多)。的方法定义是这样的: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()
Object.hashCode()
PS:当然,当在密钥中多次使用相同的枚举时,您将不得不使用更复杂的内容。