8

Java には、クラス自体の外部にあるオブジェクトの比較を提供するための があります。これにより、順序付けられた比較Comparator<T>を行うための複数または代替の方法が可能になります。

しかし、順序付けられていない比較を行う唯一の標準的な方法は、クラスequals() 内でオーバーライドすることです。

クラスの外部で複数の/代替の順序付けられていない比較を提供したい場合はどうすればよいですか? (明らかな使用例は、特定のプロパティに基づいてコレクションを等価クラスに分割することです。)

最終用途が順序付けされていないチェック (たとえば、並べ替えやインデックス作成ではない) であると仮定すると、Comparator<T>2 つのオブジェクトが等しい場合は 0 を返し、2 つのオブジェクトが等しくない場合は値 != 0 を返し、等しいかどうかをチェックするだけを実装しても問題ありませんか? (:私がこの解決策に飛びつかない唯一の理由は、技術的には、Comparator推移性と対称性を満たす関係を提供しないことで契約を破ることができるからです。)

EqualsComparator<T>標準クラスか何かがあったはずのようです。

(Guava はこのような処理を行いますか?)

4

1 に答える 1

14

はい、Guava にはEquivalenceインターフェイスとEquivalencesクラスがあります (Guava リリース 14.0 で削除されました)。

(そして、はい、それHashMap非常に便利なものであり、悲しいことに Java には欠けているものです。これには、などのオプションが本当に必要HashSetです...)

状況によっては問題ないComparator<T> かもしれませんhashCodeが、ハッシュベースのコレクションにとって重要なメソッドを提供していません。

于 2011-08-31T15:10:52.423 に答える