Java hashCode()覆盖边类

时间:2012-12-03 06:46:10

标签: java graph hashcode

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

  1. e1.from()== e2.from()&& e1.to()== e2.to()或
  2. e1.from()== e2.to()&& e1.to()== e2.from()
  3. 在另一个上下文中,我想创建一个加权边的HashSet,我最终得到重复的边,除非我也覆盖hashCode()方法,以便与我的equals()重写一致。

    所以,这是我的简单解决方案(我没有干涉我的Vertex类的Java默认hashCode()以及来自和引用Vertex对象):

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

    我的推理:

    1. 这是有效率的,因为添加的效率与人们可以获得的效率相同(我想也可以将2个哈希码与x?一起使用?)
    2. 它是对称的,所以 从和转换将提供相同的哈希码
    3. 通常会 如果顶点不同,则提供不同的哈希码。
    4. 第3点显然远非100%,所以我的部分问题是这是否重要。

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

1 个答案:

答案 0 :(得分:1)

如果fromto具有合理的hashCode()实施,那么您的解决方案就可以了。