Can StringBuffer objects be keys in TreeSet in Java?に関するこのコメントを見つけました。
「Maps in Java (多かれ少なかれ) で使用される識別戦略は 2 つあります。
ハッシュ: 入力 "Foo" は、配列内のインデックスに一意にアクセスする数値を生成するために、可能な限り最善の試みに変換されます。(純粋主義者の皆さん、私を悪用しないでください。意図的に単純化しています)。このインデックスは、値が格納される場所です。「Foo」と「Bar」が実際に同じインデックス値を生成する可能性があります。つまり、両方が同じ配列位置にマップされる可能性があります。明らかにこれは機能しないため、「equals()」メソッドの出番です。あいまいさを解消するために使用されます
比較: 比較方法を使用することにより、この余分な明確化ステップは必要ありません。なぜなら、比較によって最初からこの衝突が発生することはないからです。"Foo" が等しい唯一のキーは "Foo" です。ただし、「equals()」を compareTo() == 0; として定義することができる場合は、本当に良い考えです。一貫性のために。要件ではありません。」
私の質問は次のとおりです。クラスが同等のものを実装している場合、オブジェクトをハッシュコレクションのキーとして使用するために equals および hashcode メソッドをオーバーライドする必要がないということですか。例えば
class Person implements Comparable<Person> {
int id;
String name;
public Person(int id, String name) {
this.id=id;
this.name=name;
}
public int compareTo(Person other) {
return this.id-other.id;
}
}
さて、Hashable コレクションで Person オブジェクトを使用できますか?