Comparable
インターフェイスがメソッドのみの実装を許可していることがわかりますcompareTo
。では、なぜこのインターフェースが必要なのでしょうか?Comparable
インターフェイスを実装せずに、必要なクラスでメソッドを単純に定義および宣言できないのはなぜですか?これが正しいことを理解しています:
SortedSet<String> exampleSet = new TreeSet<String>();
<--インターフェイスをTreeSet
実装しSortedSet
ます。Date
を実装する" " というクラスがある場合Comparable
、これは正しいですかComparable<Date> example = new Date<Date>();
? はいの場合、正確には何が得られますか? つまり、どのようなオブジェクトを取得できますか? どのような特性がありますか? そうでない場合、なぜですか?
2 に答える
Comparable インターフェイスを実装せずに、必要なクラスでメソッドを単純に定義および宣言できないのはなぜですか?
その場合、ソート方法がどのように機能すると予想しますか?
要素がすべて互いに比較可能なコレクションをソートできることは非常に便利です。インターフェースはそれを表現する方法です。
これは正しいです:
Comparable<Date> example = new Date<Date>();
いいえ、Date
それ自体が一般的でない限り、そうではありません。あなたは書くことができます:
Comparable<Date> example = new Date();
...しかし、そうするのは奇妙です。通常、既存のComparable
オブジェクトを比較したいコードで使用されます。たとえば、コレクションから値を取得して、それらを相互に比較します。
Comparable インターフェイスを実装せずに、必要なクラスでメソッドを単純に定義および宣言できないのはなぜですか?
のCollections
ようTreeMap
に、単純な操作であっても、2 つのオブジェクトを比較する必要がありますadd()
。このようなツリーでは、内部的に「小さい」オブジェクトを左のツリーに配置し、より大きなオブジェクトを右のサブツリーに配置する必要があります (少し単純化されています)。
このような一般的なコレクション (TreeMap など) は、すべてのオブジェクトに対して機能するように設計されているため、オブジェクトは、compareTo() を実行する方法を知っている必要があります。
HashMap などの他のコレクションでは、オブジェクトが Comparable を実装する必要はありませんhashcode
(() を使用します) 。