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

具有相同哈希码的两个不相等对象

罗伟志
2023-03-14
问题内容

Hashcode()和equals()的概念是

1)如果两个对象根据equal()相等,则在这两个对象中的每一个上调用hashcode方法应产生相同的哈希码。

另一个是

2)如果两个对象根据equal()不相等,则不需要在两个对象中的每一个上调用hashcode方法必须产生不同的值。

我尝试并理解了第一个,这是第一点的代码。

public class Test {
    public static void main(String[] args) {

        Map<Integer, Integer> map = new HashMap<Integer, Integer>();
        map.put(1, 11);
        map.put(4, 11);
        System.out.println(map.hashCode());
        Map<Integer, Integer> map1 = new HashMap<Integer, Integer>();
        map1.put(1, 11);
        map1.put(4, 11);
        System.out.println(map1.hashCode());
        if (map.equals(map1)) {
            System.out.println("equal ");
        }
    }
}

上面的程序为两个不同的对象提供了相同的哈希码。

有人可以用一个例子来解释我吗,根据equals()不相等的两个不同对象如何具有相同的哈希码。


问题答案:

2)如果两个对象根据equal() 不相等* ,则 不需要 在两个对象中的每一个上调用hashcode方法必须产生不同的值。 *

根据哈希函数,两个不同的对象可以具有相同的哈希码。但是,两个相同的对象在散列时必须产生相同的结果(除非有人用随机数实现了散列函数,在这种情况下它是无用的)

例如,如果我要对整数进行哈希处理,而我的哈希函数只是简单地计算,(n % 10)那么数字17和数字27将产生相同的结果。这并不意味着这些数字相同。



 类似资料:
  • 问题内容: 我明白为什么为两个相等的(通过)对象提供相同的哈希码很重要。但是反之亦然,如果两个对象具有相同的哈希码,它们必须相等吗?合同还存在吗?我找不到一个可能发生这种情况的示例,因为如果所有使用equals方法的属性都被用来覆盖hashcode方法,那么我们将始终对相等的对象使用相同的hashcode。请评论。 问题答案: 如果两个对象相同,则它们不一定相等。否则,您将发现完美的哈希函数。 但

  • 我还将列表一中的和成员的每个哈希代码与列表二中成员的哈希代码进行了比较。而且没有区别。但是如果我比较完整列表的hashcode,就有区别了。我不知道为什么。我很无助。 也许有人能帮我。请提前向我致以最诚挚的问候和感谢。

  • 据我所知,两个不相等的对象可以具有相同的哈希代码。当添加或从HashMap java中检索时,将如何处理这个问题?

  • 问题内容: 如果我想找出两个键中是否没有一个键与另一个键不同,并且该键的值彼此匹配,如何最好地比较两个键。 将A与B进行比较时,由于B和D键的不同,它应该会失败。 如何最好地比较未排序的哈希图? 问题答案: 做一个支票上两者秒。 注意: 如果您包含键,那没有问题,但是如果您的Map包含类型键,则需要确保您的类实现了。

  • 我有两个哈希要合并。它们看起来像这样: 第二个散列看起来像: 我想合并这两个散列数组,结果如下所示: 有没有一种简单的方法来合并这两个哈希,或者我必须逐个遍历哈希并在另一个哈希中找到该键?

  • 我会从我想达到的目标开始 意图 该软件在for循环中解析XML数据。处理数据的 for 循环将持续到 50(因为我得到了 50 个不同的结果)。我最初所做的是,-方法解析整个XML数据并将其保存到TextViews中并显示它。但现在我想添加一个启动画面,只要数据加载就会显示。 XML文件像任何其他普通XML文件一样构建,因此当我通过for循环时,键总是相同的,但值不同。 方法 我已经做的是创建一个