我有一个非常大Set
的不可变对象,所以我正在考虑在构建时为它们分配一个唯一的哈希码。
private static int counter = Integer.MIN_VALUE;
private final double foo;
private final double bar;
private final int hashCode;
public MyImmutableObject(double foo, double bar)
{
counter++;
this.foo = foo;
this.bar = bar;
this.hashCode = counter;
}
@Override
public int hashCode()
{
return this.hashCode;
}
/**
* Unneeded override of equals since its the same as in
* Object, but shown for demonstration purposes.
*/
@Override
public boolean equals(final Object obj)
{
return this == obj;
}
这样,我可以获得尽可能高的密钥分散度,因为我将拥有 2 32 个唯一密钥。当然,这也意味着这种类型的两个对象永远不会相等,因为一个对象只会与它自己相等。
编辑:对象也用作Map
s 中的键。
这可能吗?有没有我错过的隐藏陷阱?