提问者:小点点

edge类的Java hashCode()覆盖


我正在开发一个Java中的图形库(https://github.com/aisthesis/java-graph2012 完整的上下文),并且需要覆盖权重边缘类的hashCode(),其中边缘不定向。也就是说,我设置了我的 equals() 覆盖方法,以便对于 2 个加权边 e1 和 e2,如果以下条件之一成立(from() 和 to() 方法返回边的尾部和头顶点),则它们相等:

  1. e1.从() == e2.从()

在另一个上下文中,我想创建一个加权边的HashSet,除非我也以与equals()覆盖一致的方式覆盖hashCode()方法,否则最终会得到重复的边。

所以,这是我的简单解决方案(我没有干扰我的顶点类的Java的默认哈希码()和来自和引用顶点对象):

@Override
public int hashCode() {
    return from.hashCode() + to.hashCode();     
}

我的推理是:

    < li >它是有效的,因为加法几乎是一个人可以得到的最有效的方法(我猜也可以对2个哈希代码进行异或运算?) < li >它是对称的,因此从和到的反转将给出相同的哈希代码 < li >如果顶点不同,它通常会提供不同的hashcodes。

第三点显然远没有达到100%,所以我的部分问题是这是否重要。

我的一般问题:在这种情况下,这是覆盖hashCode()的好方法吗?


共1个答案

匿名用户

提供合理的 hashCode() 实现,您的解决方案很好。