繁体   English   中英

Java:通过静态计数器在不可变对象上的唯一hashCode()

[英]Java: Unique hashCode() on Immutable Objects through static counter

我有一个非常大的不可变对象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的键。

这可能吗? 我错过了隐藏的陷阱吗?

这可能吗? 我错过了隐藏的陷阱吗?

线程安全,一件事? 当然,您可以使用AtomicInteger来绕过它。

然后还有它的无意义,真的。 内置的哈希代码将非常接近于唯一,而无需进行任何额外的工作(并且每个对象额外增加4个字节)。 鉴于你没有改变平等的含义(它仍然基本上是参考平等),我看不出有任何理由这样做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM