2017-07-17 24 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

感谢尤金的回复。 –