Этот вопрос задан в интервью. Вопрос в том, почему Strin
g и другие классы-оболочки реализуют Comparable
вместо Comparator
. Я попытался объяснить, что Comparator
в основном обеспечивает индивидуальную сортировку, а Comparable
предназначен для естественного упорядочения по умолчанию. Также с точки зрения принципа проектирования, Comparable
плотно соединен и Comparator
слабо связан. Однако я не смог уточнить, почему String
реализован Comparable
вместо Comparator
.Почему String реализует интерфейс Comparable и not Comparator
ответ
Строки реализуют Comparable
, потому что это вещи, которые можно сравнить. В целом, вещи, которые реализуют Comparable
, как правило, имеют естественный порядок, как вы упомянули.
A Comparator
- это способ сравнения вещей. Когда вы делаете компаратор, вы определяете метод, с помощью которого можно сравнивать вещи. Вы можете сделать много компараторов по заданному типу, чтобы сравнивать вещи по-разному.
Я упомянул что-то о естественном порядке выше. Да, но я думаю, что мы можем легко изменить этот порядок, переопределив метод compareTo(). Я имею в виду, что это зависит от реализации и реализации. Это не относится к Comparable или Comparator. String является изменчивым классом и реализуется таким образом, что он всегда дает вам естественный порядок сортировки. – RoyalTiger
Вы можете изменить порядок, переопределив compareTo, но для каждого класса, реализующего Comparable, вы можете иметь только одно определенное упорядочение, потому что вам нужно выбрать конкретный способ записи compareTo. Однако вы можете сделать несколько компараторов, которые сравнивают объекты определенного класса, каждый из которых может определять разные порядки. Ознакомьтесь с другими сопоставимыми вопросами против компаратора для получения дополнительной информации. – John
Другие полу-дубликаты: «[Когда класс должен быть сравнимым и/или компаратором?] (Https://stackoverflow.com/questions/1440134)» и «[В чем разница между compare() и compareTo ()?] (https://stackoverflow.com/questions/420223)». К сожалению, для этого нет канонического вопроса с двойным мишенью ... всего лишь несколько умеренно поддерживаемых взаимных дубликатов. –