我知道不同的对象可能具有相同的哈希码。但是,如果相等的对象有不同的哈希码(只是一个奇怪的问题,所以不要问我为什么这样做):
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);
}
}
答案 0 :(得分:2)
如果您未能满足equals-hashCode合约,那么依赖此合约的任何算法或数据结构都可能无法正常工作。此类数据结构的示例包括HashMap
,LinkedHashMap
,ConcurrentHashMap
,Hashtable
(如果您的对象用作密钥),HashSet
,{{1} }。
请注意,在您的情况下问题更严重:当多次调用LinkedHashSet
方法时,您在同一对象上返回不同的hashCode。所以你甚至不需要两个相同的对象来打破集合。例如,此类代码通常打印为false(尽管偶尔可能会打印为true):
hashCode
答案 1 :(得分:2)
代码中的内容不是具有不同哈希码的两个相等对象,而是每次调用hashcode()
时都会返回不同哈希码的对象。
您将无法在哈希中使用此类,因为您每次都会获得不同的哈希码,您将无法从哈希中获取对象,并且每次插入时都会哈希是一个对象,它将在哈希
中被视为不存在答案 2 :(得分:-1)
Hashcode用于HashMap或HashSet等数据结构,以确定特定对象的存储位置。如果两个对象以相同的哈希码结束,那么当它们从基于哈希的结构中存储或检索时会导致混淆。