2016-05-21 6 views
1

まず第一に、これは学問的な質問なので、練習が良いかどうかについては心配しません。 TreeSet<"Object">があり、これをコンパレータでインスタンス化したいとします。このコンパレータは通常の0、-1、および1を返しますが、2つのオブジェクトが同じクラスである場合のみです。したがって、オブジェクトが異なるクラスに属していて、それらを比較する意味がない場合、コンパレータは何を返すべきですか? -1または1?または、コンパイラの契約で、実行時例外をスローしたくない場合は、がすべての場合の注文を指定することを要求していますか?項目を論理的に比較できないときのコンパレータのベストプラクティス

答えて

2

Comparatorは、受信可能なすべての値の間で順序を指定する必要があります。 Comparatorはデータ構造の一部であるかもしれない2つのオブジェクトを持つことはできません。それを比較するのが理にかなっていない場合は、単に任意の決定をしてください。たとえば、同じクラスでない場合は、クラス名を比較してください:

+0

私はコンパレータを作成する場合、すべての可能な入力の順序を指定する必要があります例外をスローしたくありません。 –

+1

@FaiLau yup、その順序付けは一貫している必要があります。つまり、 'a.compareTo(b)<0 'なら' b.compareTo(a)> 0'を意味し、 'a.compareTo(b)= 0'ならば、 'b.compareTo(a)= 0'も含める必要があります。 – Mureinik

関連する問題