2016-08-23 4 views
-2

Diese Frage wurde in einem Interview gestellt. Die Frage war, warum Strin g und andere Wrapper-Klassen implementieren Comparable anstelle von Comparator Schnittstelle. Ich versuchte zu erklären, dass Comparator ist grundsätzlich benutzerdefinierte Sortierung und Comparable ist für die Standard-Sortierreihenfolge. Auch aus der Design-Prinzip-Perspektive ist Comparable fest gekoppelt und Comparator ist lose gekoppelt. Ich konnte jedoch nicht klären, warum StringComparable anstelle von Comparator implementiert wurde.Warum String implementiert Vergleichbare und nicht Comparator-Schnittstelle

+0

Andere Semi-Duplikate: "[Wann sollte eine Klasse vergleichbar und/oder Komparator sein?] (Https://stackoverflow.com/questions/1440134)" und "[Was ist der Unterschied zwischen compare() und compareTo ()?] (https://stackoverflow.com/questions/420223) ". Leider gibt es dafür keine kanonische dup-Ziel-Frage ... nur eine Handvoll gemäßigt aufgewerteter Duplikate. –

Antwort

3

Strings implementieren Comparable, weil sie Dinge sind, die verglichen werden können. Im Allgemeinen neigen Dinge, die Comparable implementieren, dazu, eine natürliche Reihenfolge zu haben, wie Sie erwähnten.

Ein Comparator ist eine Möglichkeit, Dinge zu vergleichen. Wenn Sie einen Komparator erstellen, definieren Sie eine Methode, mit der Sie Dinge vergleichen können. Sie können viele Vergleicher für einen bestimmten Typ erstellen, um die Dinge auf verschiedene Arten zu vergleichen.

+0

Ich erwähnte etwas über natürliche Ordnung oben. Ja, aber ich denke, wir können diese Reihenfolge leicht ändern, indem wir die compareTo() -Methode überschreiben. Ich meine, das variiert von Implementierung zu Implementierung. Es ist nicht spezifisch für Comparable oder Comparator. String ist eine veränderbare Klasse und wird so implementiert, dass Sie immer eine natürliche Sortierreihenfolge erhalten. – RoyalTiger

+0

Sie können die Reihenfolge ändern, indem Sie compareTo überschreiben, aber für jede Klasse, die Comparable implementiert, können Sie nur eine definierte Reihenfolge festlegen, da Sie eine bestimmte Methode zum Schreiben von compareTo auswählen müssen. Sie können jedoch mehrere Vergleicher erstellen, die Objekte einer bestimmten Klasse vergleichen, von denen jede unterschiedliche Ordnungen definieren kann. Sehen Sie sich die anderen Vergleichs- und Vergleichstest-Fragen an, um weitere Informationen zu erhalten. – John

Verwandte Themen