第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

有沒有辦法在Java中手動(dòng)重新哈希映射?

有沒有辦法在Java中手動(dòng)重新哈希映射?

白豬掌柜的 2023-10-12 16:55:39
我有一個(gè)Employee具有兩個(gè)屬性的類。public class Employee {    private int empId;    private String empName;    public int getEmpId() {        return empId;    }    public void setEmpId(int empId) {        this.empId = empId;    }    public String getEmpName() {        return empName;    }    public void setEmpName(String empName) {        this.empName = empName;    }    @Override    public boolean equals(Object o) {        if (this == o) return true;        if (!(o instanceof Employee)) return false;        Employee employee = (Employee) o;        return getEmpId() == employee.getEmpId() &&                Objects.equals(getEmpName(), employee.getEmpName());        //return Objects.equals(getEmpName(), employee.getEmpName());    }    @Override    public int hashCode() {        //return Objects.hash(getEmpId());        return Objects.hash(getEmpId(), getEmpName());    }}我使用此類作為 Hashmap 中的鍵?,F(xiàn)在,當(dāng)我修改原始對(duì)象(emp在這種情況下更改員工對(duì)象的名稱)時(shí),我無(wú)法訪問最初保存在地圖中的條目。只有當(dāng)我將名稱回滾到原始值時(shí),我才能再次訪問該對(duì)象。這表明,當(dāng)我更改 Employee 對(duì)象中的名稱時(shí),它的哈希值已更改,并且未存儲(chǔ)在 Hashmap 中的正確存儲(chǔ)桶下。Map<Employee, String> map = new HashMap<>();;        // Set Employee with Name Shashi        Employee emp = new Employee();        emp.setEmpId(1);        emp.setEmpName("Shashi");        // Add to Map        map.put(emp, emp.getEmpName());        // Modify The Original Employee object's Name        emp.setEmpName("Shashi Bhushan");        // This object does not exist as key in map now        Assert.assertFalse(map.containsKey(emp));        // Create object with same name(used when creating)        Employee similarEmployee = new Employee();        similarEmployee.setEmpId(1);        similarEmployee.setEmpName("Shashi");解決能夠在映射中獲取對(duì)象的問題的一種解決方案是使 Employee 類不可變。我能想到的另一個(gè)理論解決方案是重新散列映射并將修改后的員工對(duì)象保留在映射中正確的存儲(chǔ)桶中,但我在散列映射中看不到任何重新散列它的方法。請(qǐng)建議我是否朝著正確的方向思考,或者是否有其他解決方案。PS這一切都是為了理解hashmap,所以對(duì)于如何解決這個(gè)問題沒有限制。
查看完整描述

1 回答

?
FFIVE

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊

我認(rèn)為empId可以唯一標(biāo)識(shí)一個(gè)員工。


soequals和hashCode方法只需要處理empId字段:


   @Override

    public boolean equals(Object o) {

        if (this == o) return true;

        if (!(o instanceof Employee)) return false;

        Employee employee = (Employee) o;

        return getEmpId() == employee.getEmpId());

    }


    @Override

    public int hashCode() {

        return Objects.hash(getEmpId());

    }


查看完整回答
反對(duì) 回復(fù) 2023-10-12
  • 1 回答
  • 0 關(guān)注
  • 109 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)