いいえ、指定することはできません。また、TreeSet
はComparator
という使い方を誤解しています。 TreeSet Javadocから
:それは正しくSetインタフェースを実装し にある場合(明示的 コンパレータが提供されているかどうか)のセットによって維持順序付けがequalsと一貫性がなければならないことを
注意。 (等価との一貫性の正確な定義については、 を参照してください)これは です。これは、Setインタフェースが等価演算で定義されているため、 ですが、TreeSetインスタンスは、 compareToこの方法では と等しいと見なされる2つの要素は、セットの観点からは等しい。 のセットの動作は、順序が矛盾する場合でも正しく定義されます。 と等しい。 Set インターフェイスの一般契約に従わないだけです。 Comparable javadocから
:クラスCの自然順序付けを と一致するように言われている
はe1.compareTo(E2)== 0と同じブール値 を有する場合にのみ等しいですe.equals(null)がfalseを返すにもかかわらず、nullは、どのクラスのインスタンスでも ではなく、ecompareTo(null)は NullPointerExceptionをスローする必要があることに注意してください。Collection javadocから
:このコレクションは 指定された要素が含まれている場合
ブールは、真(オブジェクトo)
戻り値が含まれています。より正式には、この コレクションに、(o == null? e == null:o.equals(e))などの少なくとも1つの要素eが含まれている場合にのみtrueを返します。
したがって、仕様によってCollection<E>
インターフェースと完全を実装するクラスのいずれかの種類が存在することができないオブジェクトを挿入するために、いくつかの外部のコンパレータスタイルのオブジェクトに依存します。オブジェクトが既に挿入されているかどうかを確認するには、すべてのコレクションでObject
クラスのequals
メソッドを使用する必要があります。
:
ラッパークラスは、次のようになりますか?一般に、アプリケーションのドメイン内にあるオブジェクトに新しいメソッドを追加することは問題ありません。たとえば、生成されたAxisクライアントから受け取ったオブジェクトのマップを作成しようとすると、WebServiceのドメインとアプリケーションのドメインが混在しています。つまり、本質的にあなたが求めるものは決して必要ではないということです。 – bezmax