簡體   English   中英

如果 hashcode 返回一個常量值並且 equals 返回 false,get 方法如何在 hashmap 中工作?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM