![](/img/trans.png)
[英]How HashMap retrieves different values if Key's hashcode is same but equals method return false
[英]How does get method works in hashmap if hashcode returns a contant value and equals return false?
我有如下 Dept 類,我覆蓋了 hashcode 和 equals 方法。 Hashcode 返回一個常量值,並且 equals 總是返回 false。
public class Dept {
private int depid;
private String deptname;
public Dept(int depid, String deptname) {
super();
this.depid = depid;
this.deptname = deptname;
}
public int getDepid() {
return depid;
}
public void setDepid(int depid) {
this.depid = depid;
}
public String getDeptname() {
return deptname;
}
public void setDeptname(String deptname) {
this.deptname = deptname;
}
@Override
public int hashCode() {
return 100;
}
@Override
public boolean equals(Object obj) {
return false;
}
@Override
public String toString() {
return "Dept [depid=" + depid + ", deptname=" + deptname + "]";
}
}
我有一個主要的方法
public static void main(String[] args) {
Dept dept = new Dept(1, "it");
Dept dept1 = new Dept(1, "it");
Dept dept2 = new Dept(1, "it");
HashMap<Dept, String> map = new HashMap<>();
map.put(dept, "a");
map.put(dept1, "b");
map.put(dept2, "c");
System.out.println(map.get(dept2));// returns c
System.out.println(map.get(dept1));// returns b
}
根據我讀過的理論,返回一個常量值的哈希碼會給我們哈希圖中相同的桶索引,因此值存儲在單個桶中 對於 equals 方法,它返回 false,因此邏輯上相同的 dept 對象被保存多次。 get 方法如何從 hashmap 返回准確正確的值?
由於一個對象總是應該equals
它自己, HashMap
首先使用==
(object identity) 檢查,因為這要快得多,並且會在許多常見用例中匹配。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.