如果两个相同的对象具有不同的哈希码,那么缺点是什么

时间:2015-10-24 16:30:36

标签: java oop

我知道不同的对象可能具有相同的哈希码。但是,如果相等的对象有不同的哈希码(只是一个奇怪的问题,所以不要问我为什么这样做):

public class Myclass{
    int data = 0;
    @Override
    public boolean equals(Object obj) {
        return obj instanceof  Myclass && ((Myclass) obj).data == this.data;
    }
    @Override
    public int hashCode() {
        return (int)(Math.random()*1000);
    }
}

3 个答案:

答案 0 :(得分:2)

如果您未能满足equals-hashCode合约,那么依赖此合约的任何算法或数据结构都可能无法正常工作。此类数据结构的示例包括HashMapLinkedHashMapConcurrentHashMapHashtable(如果您的对象用作密钥),HashSet,{{1} }。

请注意,在您的情况下问题更严重:当多次调用LinkedHashSet方法时,您在同一对象上返回不同的hashCode。所以你甚至不需要两个相同的对象来打破集合。例如,此类代码通常打印为false(尽管偶尔可能会打印为true):

hashCode

答案 1 :(得分:2)

代码中的内容不是具有不同哈希码的两个相等对象,而是每次调用hashcode()时都会返回不同哈希码的对象。

您将无法在哈希中使用此类,因为您每次都会获得不同的哈希码,您将无法从哈希中获取对象,并且每次插入时都会哈希是一个对象,它将在哈希

中被视为不存在

答案 2 :(得分:-1)

Hashcode用于HashMap或HashSet等数据结构,以确定特定对象的存储位置。如果两个对象以相同的哈希码结束,那么当它们从基于哈希的结构中存储或检索时会导致混淆。