[英]How HashMap retrieves different values if Key's hashcode is same but equals method return false
[英]How can UserDefined class be a key of hashmap if hashCode() & equals() return same value
我正在嘗試使用 UserDefined class 作為鍵來實現 HashMap,即使我同時實現了 hashCode()(每個對象返回 0)和 equals()(每個對象返回 false),我也成功了。 我的代碼
public class UserDefinedMapKey {
public static void main(String[] args) {
HashMap<Beck, Integer> hm = new HashMap<Beck, Integer>();
hm.put(new Beck(10,"archit"), 20);
hm.put(new Beck(10,"archit"), 30);
hm.put(new Beck(30,"goel"), 50);
for(Map.Entry<Beck, Integer> m : hm.entrySet()) {
System.out.println(m.getKey() + "===" + m.getValue());
}
}
}`
`
class Beck {
int arc;
String grc;
public Beck(int i, String string) {
// TODO Auto-generated constructor stub
}
public int getArc() {
return arc;
}
public void setArc(int arc) {
this.arc = arc;
}
public String getGrc() {
return grc;
}
public void setGrc(String grc) {
this.grc = grc;
}
@Override
public int hashCode() {
return 0;
}
@Override
public boolean equals(Object b) {
return false;
}
}
output:-
main.java.Interview.Beck@0===20
main.java.Interview.Beck@0===30
main.java.Interview.Beck@0===50
誰能讓我知道它是如何工作的原因
發生這種情況是因為equals
返回 false。 equals
/ hashCode
合約完全被破壞了。 沒有斷言如果兩個對象相同,它們就相等。 兩個對象可以具有相同的哈希碼,但仍然不相等。
發生的情況是,在第 2 次和第 3 次 put 調用中,檢查給定存儲桶中的任何對象(由hashCode
定義)是否相同。 它們不是因為equals
返回false
,所以新的 object 被添加到同一個桶中。
您需要正確執行合同才能使其正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.