在Java中用于联合类似类型的哈希码

问题描述:

我正在使用名为Key的类。 它有2个栏位:在Java中用于联合类似类型的哈希码

  1. 地址(类型MyAddress),其具有GUID(型长)
  2. ID(型长)

这个类可以具有在任何给定点的一个以下:

  • 地址不为空和id == - 1个
  • adresss为空和id> 0

会不会是正确的做到以下几点:

int hashcode(){ 
    if (address==null) return Long.hashCode(id) 
    else return Long.hashcode(address.guid) 
} 

是否有可能从发生的任何问题? 我主要想确保在任何给定时间只有一个字段是相关的时,这是在类联合类中生成哈希码的正确方法。

+0

如果类的实例是不可变的,那就很好了。 –

+0

什么是equals函数? –

+0

我相信等于将地址为空,所以与id相比,否则与地址的guid比较。 – slashms

哈希码的要求是两个相等的对象具有相同的哈希码。它看起来像你的哈希码满足这个,因此是完全有效的。

这就是说,它是更好的做法是所有你equals方法是测试场的结合,并设计在于,假设该对象在HashSet使用这样的哈希代码,对象合理均匀分布始终。 This answer将概述如何做到这一点的一个很好的例子。