2016-08-23 13 views
-2

この質問はインタビューで尋ねられました。問題はStrin gと他のラッパークラスがComparatorインターフェイスの代わりにComparableを実装する理由です。私はComparatorが基本的にカスタマイズされた並べ替えを提供することを説明しようとしました。Comparableはデフォルトの自然順序付けの注文です。また、設計原理の観点からは、Comparableは密結合であり、Comparatorは疎結合である。しかし、StringComparatorの代わりにComparableを実装した理由を明確にすることができませんでした。文字列がComparableインターフェイスではなくComparatorインターフェイスを実装する理由

+0

その他の準重複:「[クラスはComparableかComparatorか](https://stackoverflow.com/questions/1440134)」と「[compare()とcompareToの違いは何ですか? )?](https://stackoverflow.com/questions/420223)」を参照してください。残念ながら、このための標準的なdup-targetの質問はありません...中程度にupvoted相互重複のほんの一握りです。 –

答えて

3

Comparableの文字列は、と比較できるので、を実装しています。一般に、Comparableを実装するものは、あなたが言及したように、自然順序付けをする傾向があります。

Comparatorは、比較する方法です。コンパレータを作成するときは、物事を比較するためのメソッドを定義しています。特定の型で多くのComparatorを作成して、さまざまな方法で物を比較することができます。

+0

私は上記の自然順番について何か言及しました。はい、私はcompareTo()メソッドをオーバーライドすることでこの順序を簡単に変更できると思います。これは実装ごとに異なることを意味します。これはComparableやComparatorに特有のものではありません。 Stringは可変クラスであり、常に自然な順序ソートを提供するような方法で実装されています。 – RoyalTiger

+0

compareToをオーバーライドすることで順序を変更できますが、Comparableを実装する各クラスについては、compareToを書き込む特定の方法を選択する必要があるため、1つの定義済みの順序しか持てません。ただし、特定のクラスのオブジェクトを比較する複数のComparatorを作成することができます。それぞれのオブジェクトは異なる順序を定義できます。他の比較可能な比較対質問もチェックしてください。 – John

関連する問題