2017-07-17 43 views
1

請讓我知道重寫equals和hashcode方法是強制性的,即使我使用的密鑰是不可變的類。不變的查詢

例如我有一個不可變的類Employee,我想在地圖中用作鍵。我是否需要重寫equals和hashcode方法?

public class Employee { 

    private int empId; 
    private String name; 

    public Employee(String name, int empId) { 

     this.empId = empId; 
     this.name=name; 
    } 

    public int getEmpId() { 
     return empId; 
    } 
    public String getName() { 
     return name; 
    } 
} 

感謝, 卡邁勒

+0

是的,你**做**需要重寫它們。 –

回答

0

簡短的回答:是的,很長的回答:yeeeeees;特別是因爲HashMapHashSet要求通過文檔。這些是在基於散列結構內部使用的主要機制。

你也應該實現Comparable接口讓您Keys(如果你使用java-8) - 作爲一個可以在內部使用來加速你的搜索查詢。

對於HashMap鍵來說,不變性實際上是一件非常好的事情。想象一下,你把一個關鍵字放到地圖上(hashcode和equals被計算出來),然後你改變它(改變它的hashcode/equals)並再次搜索它 - 它可能根本找不到。

+0

感謝尤金的回覆。 –