Java Object Orderingチュートリアルを見ると、記事の最後のセクション'Comparators'がちょっと混乱しました。ソートされたコレクションのJavaオブジェクトの注文
従業員の名前に匹敵するクラスEmployee
を定義することにより、このクラスがequals
メソッドをオーバーライドしているかどうかを示すチュートリアルは表示されません。それから、カスタマイズしたComparator
を使用して、従業員が年配者によってソートされ、従業員のリストをソートして理解できるようにします。
次に、このようなTreeSet
として分別回収のために動作しませんなぜチュートリアルでは、(SortedSet
)について説明し、その理由は次のとおりです。
それがイコールとは互換性がありません発注を生成します。つまり、このComparatorは、equalsメソッドではないオブジェクトと同じです。特に、同じ日に雇用された2名の従業員は、同等の人と比較されます。リストをソートするときは、これは問題ではありません。 Comparatorを使用してソートされたコレクションを注文すると、それは致命的です。このComparatorを使用して、同じ日付に雇われた複数の従業員をTreeSetに挿入すると、最初のものだけがセットに追加されます。 2番目の要素は重複要素として認識され、無視されます。
私はSet
がequals
法に基づいていないながらList
要素が重複することができます知っているので、今私は、困惑しています。だから、Comparator
によって生成された順序がequalsと互換性がないというチュートリアルがいつ出てくるのだろうか、それはどういう意味ですか?また、「このComparatorを使用して、同じ日付に雇われた複数の従業員をTreeSetに挿入すると、最初のものだけがセットに追加されます。 2番目の要素は重複要素として認識され、無視されます。私はどのようにComparator
を使用して元のequals
メソッドの使用に影響を与えるか分からない。私は私の質問は、TreeSet
がこの場合、そしてcompare
とequals
の方法が使用されるときに、どのように生成されソートされるのかと考えています。 TreeSet
ありがとう!そして、これは 'Set'インターフェースとの一貫性を保つことであり、' contains() 'のような' equals'メソッドを使うメソッドを見たことが分かりました。 –