この質問はインタビューで尋ねられました。問題はStrin
gと他のラッパークラスがComparator
インターフェイスの代わりにComparable
を実装する理由です。私はComparator
が基本的にカスタマイズされた並べ替えを提供することを説明しようとしました。Comparable
はデフォルトの自然順序付けの注文です。また、設計原理の観点からは、Comparable
は密結合であり、Comparator
は疎結合である。しかし、String
がComparator
の代わりにComparable
を実装した理由を明確にすることができませんでした。文字列がComparableインターフェイスではなくComparatorインターフェイスを実装する理由
答えて
Comparable
の文字列は、と比較できるので、を実装しています。一般に、Comparable
を実装するものは、あなたが言及したように、自然順序付けをする傾向があります。
Comparator
は、比較する方法です。コンパレータを作成するときは、物事を比較するためのメソッドを定義しています。特定の型で多くのComparatorを作成して、さまざまな方法で物を比較することができます。
私は上記の自然順番について何か言及しました。はい、私はcompareTo()メソッドをオーバーライドすることでこの順序を簡単に変更できると思います。これは実装ごとに異なることを意味します。これはComparableやComparatorに特有のものではありません。 Stringは可変クラスであり、常に自然な順序ソートを提供するような方法で実装されています。 – RoyalTiger
compareToをオーバーライドすることで順序を変更できますが、Comparableを実装する各クラスについては、compareToを書き込む特定の方法を選択する必要があるため、1つの定義済みの順序しか持てません。ただし、特定のクラスのオブジェクトを比較する複数のComparatorを作成することができます。それぞれのオブジェクトは異なる順序を定義できます。他の比較可能な比較対質問もチェックしてください。 – John
- 1. Serializableインターフェイスを実装するクラスがインターフェイスのメソッドを実装しない理由を教えてください。
- 2. 2つの文字列フィールドにIComparableインターフェイスを実装する
- 3. 文字列を同等のインターフェイスに実装しています
- 4. インターフェイスを実装していないインターフェイスの実装
- 5. 属性付き文字列インターフェイスの実装
- 6. Collections.sort、Enum、Comparableインターフェイスの問題
- 7. インターフェイスの実装
- 8. Java:Cloneableインターフェイスの理由
- 9. ジェネリックスがインターフェイスに基づいているインターフェイスを実装する
- 10. インターフェイスを実装するメリット
- 11. SqlDataReader.ReadAsync()のインターフェイスがない理由
- 12. equals()にはComparatorがありますが、JavaのComparableインターフェイスにはありません
- 13. C#enumがデフォルトで実装するインターフェイス
- 14. インターフェイスの実装とインターフェイスの提供
- 15. ICollection実装とインターフェイスの理解
- 16. responseHandlerインターフェイスの実装
- 17. インターフェイスの実装C#
- 18. Typescriptインターフェイスの日付は、実際には文字列です。
- 19. C++でのインターフェイスの実装
- 20. インターフェイスでのインターフェイスプロパティの実装
- 21. クラスデザイン:別のインターフェイスを実装しているインターフェイスを実装しているクラス
- 22. DryIoc Registerインターフェイスの多くの実装
- 23. C++でインターフェイスを実装する
- 24. JavaでカスタムCOMインターフェイスを実装する
- 25. サービスファブリックアクター複数のインターフェイスを実装するインターフェイス
- 26. 明示的なインターフェイスの実装と複数のインターフェイス
- 27. インターフェイスのインターフェイスプロパティを実装する派生クラスの具象プロパティを許可しない理由は何ですか?
- 28. Comparableインターフェイスを実装して2つのオブジェクトを比較するにはどうすればよいですか?
- 29. XmlResourceParser:inferfaceはインターフェイスを実装しますか?
- 30. Delphiでは、インターフェイスを実装していないオブジェクトにインターフェイスをバインドすることが可能です
その他の準重複:「[クラスはComparableかComparatorか](https://stackoverflow.com/questions/1440134)」と「[compare()とcompareToの違いは何ですか? )?](https://stackoverflow.com/questions/420223)」を参照してください。残念ながら、このための標準的なdup-targetの質問はありません...中程度にupvoted相互重複のほんの一握りです。 –