当前位置: 首页 > 面试题库 >

具有两个无序字段的唯一hashCode

路奇
2023-03-14
问题内容

我需要一个hashCodeJava实现,它忽略类中字段的顺序Edge。首先,节点可以是第二个节点,第二个可以是节点优先。

这是我的方法取决于顺序:

public class Edge {
    private Node first, second;

    @Override
    public int hashCode() {
        int hash = 17;
        int hashMultiplikator = 79;
        hash = hashMultiplikator * hash
                + first.hashCode();
        hash = hashMultiplikator * hash
                + second.hashCode();
        return hash;
    }
}

有没有一种方法可以计算出以下边缘相同但唯一的哈希值?

Node n1 = new Node("a");
Node n2 = new Node("b");
Edge ab = new Edge(n1,n2);
Edge ba = new Edge(n2,n1);

ab.hashCode() == ba.hashCode()应该是true


问题答案:

您可以使用某种交换运算来代替现在的运算,例如加法:

@Override
public int hashCode() {
    int hash = 17;
    int hashMultiplikator = 79;
    int hashSum = first.hashCode() + second.hashCode();
    hash = hashMultiplikator * hash * hashSum;
    return hash;
}

我建议您仍然使用乘数,因为它为哈希码提供了一些熵。在这里查看我的回答:

遵循一些良好的哈希规则是:

  • 混淆您的运营商。通过混合您的运算符,可以使结果变化更多。仅x * y在此测试中使用,我发生了很多碰撞。
  • 使用质数进行乘法运算。质数具有有趣的二进制性质,导致乘法更不稳定。
  • 避免使用移位运算符(除非您真的知道自己在做什么)。它们在数字的二进制数中插入大量零或一,从而降低了其他运算的波动性,甚至可能缩小您可能的输出数。



 类似资料:
  • 我在Wordpress和Visual Composer一起工作,我有一个切换容器。基本上,我点击每个选项卡,下面的内容就会发生变化。我想通过CSS为每个选项卡分配一个不同的图像作为背景。但是,我已经实现了这一点,因为每个选项卡都有相同的类名(由visual composer赋予它),所以图像是相同的。我需要弄清楚如何给每个选项卡一个唯一的id,这样我就可以给每个选项卡一个自己的背景图像--但是由于

  • 问题内容: 我有这张桌子: 我想创建一个仅在时才适用于字段的唯一约束。 我试图创建一个,但是Oracle说: 什么是正确的语法? 问题答案: @jamesfrj:您似乎正在尝试确保您的表应只包含一个记录。 您可以尝试通过串联各列来创建唯一的功能索引,如下所示 希望能帮助到你

  • 问题内容: 有没有一种方法可以将几个字段定义为Django中唯一的字段? 我有一张(期刊的)卷表,而我不希望同一期刊有一个以上的卷号。 我试图将属性放在字段中但是它不起作用。 问题答案: 有一个简单的解决方案称为unique_together,它可以完全满足你的要求。 例如: 在你的情况下:

  • 问题内容: 我有两个表帐户和余额 我想加入这两个表并获取特定cid的最大日期余额。 输出结果为- 问题答案: 您需要使用两个子查询,如下所示: 输出: 客户编号 姓名 移动的 日期 平衡 1个 美国广播公司 12345 2013年9月20日00:00:00 + 0000 300 2个 XYZ 98475 2013年9月21日00:00:00 + 0000 600 看到这个SQLFiddle

  • 问题内容: 我有一个已经存在的表,该表的字段应该唯一,但不是。我只知道这一点,因为在表中创建了一个条目,该条目具有与另一个已经存在的条目相同的值,这导致了问题。 如何使该字段仅接受唯一值? 问题答案: 对于MySQL 5.7.4或更高版本: 从MySQL 5.7.4开始,ALTER TABLE的IGNORE子句被删除,使用它会产生错误。 因此,请确保先删除重复的条目,因为不再支持IGNORE关键字

  • 问题内容: 我有一个实体类的两个字段,我不希望它们是唯一的,而是用作本身必须是唯一的键的复合字段。例如,我有两个字段(名称和版本),这些字段对于其他记录可以相同,但它们必须唯一。使用Hibernate(带有注释)做到这一点的最佳方法是什么?我正在将Hibernate Validator用于其他字段,但不确定如何使用该方法来验证两个字段一起组成唯一键。我正在使用具有id泛型类型的泛型实体类,可以将其