2017-07-17 4 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は、ドキュメンテーションを介してそれを要求しているからです。これらは、ハッシュベースの構造内で内部的に使用される主要な仕組みです。 (あなたがjava-8を使用している場合)

また、あなたあなたKeysためComparableインターフェイスを実装する必要があります - それは、スピードアップするために、検索クエリを内部的に使用される可能性がありますよう。

不変性は、実際にはHashMapキーにとって非常に良いことです。 1つのキーをマップに入れ(ハッシュコードと等価が計算される)、それを変更して(ハッシュコード/等価を変更して)それを再度検索すると、全く見つからないことがあるとします。

+0

あなたの返事に感謝Eugene。 –