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 String
Comparable
anstelle von Comparator
implementiert wurde.Warum String implementiert Vergleichbare und nicht Comparator-Schnittstelle
Antwort
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.
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
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
- 1. Enum implementiert Vergleichbare <E> warum nicht Vergleichbare <Enum<E>>
- 2. Wie implementiert man die Java-vergleichbare Schnittstelle?
- 3. Vergleichbare Implementierung nicht
- 4. öffentliche Klasse <Allgemein type> implementiert Vergleichbare
- 5. Schnittstellen und Vergleichbare
- 6. Warum implementiert MySQL (und MsSQL) ANSI_NULLS nicht?
- 7. CompareTo() und() Methoden des Komparator und vergleichbare
- 8. Vergleichbare Nullwerttypen?
- 9. Java Vergleichbare Vererbung
- 10. Warum implementiert Thread IDisposable nicht?
- 11. Warum ArrayList Queue nicht implementiert?
- 12. Warum implementiert SingletonSet nicht SortedSet
- 13. Warum AbstractCollection nicht equals() implementiert?
- 14. Warum Int implementiert "Monoid" nicht?
- 15. Sortieren Umsetzung Vergleichbare nicht auf Android arbeitet
- 16. Warum heterogene Vergleichssuche für `at` und` operator [] `nicht implementiert ist?
- 17. Warum implementiert OracleParameter ICloneable, aber Clone() nicht?
- 18. Vergleicher und vergleichbare negative Szenarien in Java
- 19. Java Priority Queues und vergleichbare Schnittstelle
- 20. Set Verständnis und verschiedene vergleichbare Beziehungen
- 21. Warum werden AsObservable und AsEnumerable anders implementiert?
- 22. Vergleichbare PostgreSQL-Versionsnummer
- 23. Warum implementiert HttpServlet Serializable?
- 24. Warum Eclipse implementiert Schnittstellen nicht sehen?
- 25. Warum wird Hadoop nicht mit MPI implementiert?
- 26. Warum java.util.BitSet implementiert java.util.Set
- 27. Ist ValidableBindableBase in Prism.Wpf nicht implementiert? Warum?
- 28. Warum implementiert die ExecutorService-Schnittstelle AutoCloseable nicht?
- 29. Warum wurde atomicAdd nicht für Doubles implementiert?
- 30. std.algorithm.joiner (string [], string) - warum Ergebniselemente sind dchar und nicht char?
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. –