в чем разница между интерфейсами comparable и comparator
Русские Блоги
Разница между Comparable и Comparator в Java
1. Введение в сопоставимый
Comparable это сортировка интерфейса. Если класс реализует интерфейс Comparable, это означает, что класс поддерживает сортировку. Список или массив объектов класса, который реализует интерфейс Comparable, может быть автоматически отсортирован по Collections.sort или Arrays.sort.
Кроме того, объекты, которые реализуют этот интерфейс, могут использоваться как ключи в упорядоченной карте или как коллекции в упорядоченной коллекции без указания компаратора. Интерфейс определяется следующим образом:
T представляет тип тех объектов, которые можно сравнить с этим объектом.
Этот интерфейс имеет только один метод сравнения, который сравнивает порядок этого объекта с указанным объектом.Если объект меньше, равен или больше указанного объекта, он возвращает отрицательное целое число, ноль или положительное целое число соответственно.
Теперь мы предполагаем класс Person, код которого выглядит следующим образом:
Теперь, когда есть два объекта класса Person, как мы можем сравнить их размер? Мы можем реализовать интерфейс Comparable, позволив Person:
2. Введение в Компаратор
Теперь, если вышеупомянутый класс Person не реализует интерфейс Comparable, как следует сравнивать размер? Мы можем создать новый класс и позволить ему реализовать интерфейс Comparator для создания «компаратора».
Теперь мы можем использовать этот компаратор для сортировки:
В-третьих, разница между Comparable и Comparator
Использовать Comparable просто, если объект, реализующий интерфейс Comparable, напрямую становится сопоставимым объектом, но исходный код необходимо изменить.
Преимущество использования Comparator состоит в том, что нет необходимости изменять исходный код, а нужно реализовывать другой компаратор. Когда необходимо сравнить пользовательский объект, передайте компаратор и объект вместе, чтобы сравнить размер, и в Comparator Пользователи могут самостоятельно реализовывать сложную и общую логику, чтобы они могли сопоставлять некоторые относительно простые объекты.
Comparable и Comparator
Два новых интерфейса java.lang.Comparable и java.util.Comparator были добавлены в версии Java 5. Использование данных интерфейcов в своих приложениях позволяет упорядочивать (сортировать) данные.
Интерфейс Comparable
В интерфейсе Comparable объявлен только один метод compareTo (Object obj), предназначенный для упорядочивания объектов класса. Данный метод удобно использовать для сортировки списков или массивов объектов.
Метод compareTo (Object obj) сравнивает вызываемый объект с obj. В отличие от метода equals, который возвращает true или false, compareTo возвращает:
Если типы объектов не совместимы при сравнении, то compareTo (Object obj) может вызвать исключение ClassCastException. Необходимо помнить, что аргумент метода compareTo имеет тип сравниваемого объекта класса.
Обычные классы Byte, Short, Integer, Long, Double, Float, Character, String уже реализуют интерфейс Comparable.
Пример реализации интерфейса Comparable
Результат выполнения программы:
В примере значения сортируются сначала по полю str (по алфавиту), а затем по num в методе compareTo. Это хорошо видно по двум строкам с одинаковыми значения str и различными num. Чтобы изменить порядок сортировки значения str (в обратном порядке), необходимо внести небольшие изменения в метод compareTo.
Интерфейс Comparator : compare, compareTo
В интерфейсе Comparator объявлен метод compare (Object obj1, Object obj2), который позволяет сравнивать между собой два объекта. На выходе метод возвращает значение 0, если объекты равны, положительное значение или отрицательное значение, если объекты не тождественны.
Метод может вызвать исключение ClassCastException, если типы объектов не совместимы при сравнении. Простой пример реализации интерфейса Comparator:
Результат выполнения программы:
Усложним пример, и реализуем несколько видов сортировки. Для этого создадим класс Product с полями name, price и quantity.
Создадим два класса (SortedByName, SortedByPrice), реализующих интерфейс Comparator для сортировки объектов по названию и по цене :
Пример использования Arrays.sort :
Результат выполнения программы:
Для сортировки объектов были реализованы два независимых компаратора по наименованию и по цене (SortedByName и SortedByPrice). Сортировка выполняется с помощью класса Arrays, у которого есть метод sort. Данный метод в качестве второго аргумента принимает тип компаратора.
Можно использовать также метод sort класса Collections, который в качестве первого входного аргумента принимает список объектов:
Отличие интерфейсов Comparator и Comparable
Интерфейс Comparable используется только для сравнения объектов класса, в котором данный интерфейс реализован. Т.е. interface Comparable определяет логику сравнения объекта определенного ссылочного типа внутри своей реализации (по правилам разработчика).
Comparator представляет отдельную реализацию и ее можно использовать многократно и с различными классами. Т.е. interface Comparator позволяет создавать объекты, которые будут управлять процессом сравнения (например при сортировках).
Русские Блоги
Разница между сравниваемым и компаратором в Java
Каталог статей
1. Введение
Классы, реализующие сравниваемый интерфейс и интерфейс компаратора, предназначены для удобства сортировки массива экземпляров объектов, поскольку их можно вызывать напрямую.
java.util.Arrays.sort (имя массива объектов), вы можете настроить правила сортировки. Принцип сортировки основан наКрасно-черное двоичное деревоПринцип реализован.
разница:
1 Другой метод сортировки
Метод сопоставимого интерфейса: compareTo (Object o)
Метод интерфейса компаратора: compare (T o1, To2)
2 вида дизайна разные до и после
Интерфейс Comparable используется в дизайне класса; в начале дизайна это оправдание реализовано для указания метода сортировки.
Интерфейс компаратора для проектирования классов завершен, но также требуется сортировка (Массивы).
Во-вторых, операция экземпляра интерфейса Comparable
Метод compareTo существует более чем в N. Основная причина состоит в том, что все они реализуют интерфейс compareTo и реализуют метод compareTo в интерфейсе.
Класс исходного кода Jdk, который реализует Compareable
Когда создается класс Student, он реализует интерфейс Comparable и переопределяет метод compareTo ().
Оценки отсортированы от высокого к низкому, и оценки одинаково отсортированы от молодого до самого старого.
Три, операция экземпляра интерфейса компаратора
В классе Student01 изначально не было компаратора. После завершения класса создается класс Comparator.
Сортировать по возрасту от самого старшего к самому младшему.
Примечание: 1. Если класс хочет реализовать интерфейс Comparator: он должен реализовать функцию сравнения (T o1, T o2), но ему не нужно реализовывать функцию equals (Object obj).
В-четвертых, при использовании настраиваемого сортировщика
Например: Collections.sort необходимо передать пользовательский сортировщик, использовать анонимный метод внутреннего класса, передать компаратор, переписать метод и использовать A.compareToB для сортировки
В-пятых, разница между Comparable и Comparator
Comparable эквивалентен «внутреннему компаратору», а Comparator эквивалентен «внешнему компаратору».
У этих двух методов есть свои преимущества и недостатки.Использовать Comparable просто.Пока объект, реализующий интерфейс Comparable, напрямую становится сопоставимым объектом, исходный код необходимо изменить. Преимущество использования компаратора заключается в том, что нет необходимости изменять исходный код, а нужно реализовать компаратор. Когда нужно сравнить настраиваемый объект, передайте компаратор и объект вместе, чтобы сравнить размер, и он находится в компараторе. Пользователи могут самостоятельно реализовать сложную и универсальную логику, чтобы они могли сопоставить некоторые относительно простые объекты, что может сэкономить много времени на дублирование.
6. Расширение: Collection TreeSet (естественная сортировка и пользовательская сортировка).
1. Естественная сортировка TreeSet:
1. Пусть сами элементы будут сравнительными,
2. Реализуйте интерфейс Compareable и переопределите его метод CompareTo.
Во-вторых, настраиваемая сортировка TreeSet
1. Происхождение: когда сам элемент не имеет сопоставимости или сопоставимость не является необходимой.
На этом этапе необходимо сделать саму коллекцию сравнительной, и во время инициализации существует метод сравнения.
1) Реализуйте интерфейс компаратора
2) Скопируйте метод сравнения
3) При создании объекта коллекции TreeSet укажите объект Comparator,
Справочная статья:
https://blog.csdn.net/wilson27/article/details/90339765
https://www.cnblogs.com/xujian2014/p/5215082.html
https://blog.csdn.net/liuchuangjin/article/details/46500283
Интеллектуальная рекомендация
Tree Дерево отрезков линии】 COGS 2632
Ссылочный блогАвтор:dreaming__ldxИсточник: CSDN Портал последовательности операций 【Название описания】 Последовательность длины n, вес порядкового номера в начале равен 0, есть m операций Поддерживают.
PAT-A-1046 кратчайшее расстояние [префикс и]
The task is really simple: given N exits on a highway which forms a simple cycle, you are supposed to tell the shortest distance between any pair of exits. Input Specification: Each input fi.
Как нарисовать несколько линий ROC на одном графике?
Класс коллекции JAVA
Резюме JAVA-коллекции Один, коллекция 1. Характеристики коллекций: коллекции используются только для хранения объектов, длина коллекции является переменной, и в коллекции могут храниться объекты разны.
MySQL репликация главный-подчиненный + переключатель главный-подчиненный
MySQL репликация главный-подчиненный + переключатель главный-подчиненный 05 января 2018 10:46:35Протрите протирать прыжок Количество просмотров: 5183Более Персональная категория:база данныхЭксплуатаци.
Русские Блоги
В последнее время в процессе изучения жадного алгоритма и динамического программирования появилась естественная операция сортировки.Кстати, давайте вкратце разберемся с двумя интерфейсами, используемыми для сортировки после сравнения объектов в Java: Comparable и Comparator. Если это число, просто сравните его напрямую, а если это объект, как отсортировать его после сравнения? Вам необходимо использовать эти два интерфейса и передать самоопределяемый класс в качестве параметра универсальному интерфейсу, переопределить метод сравнения в интерфейсе и добавить атрибуты класса, которые вы хотите выбрать и отсортировать, в условия сравнения.
Основное отличие интерфейса
(1) Интерфейс Comparable находится под java.lang, а интерфейс Comparator находится под java.lang.
(2) Если интерфейс Comparable реализован, когда класс определен, метод compareTo () прямо переопределяется в нем. Если он не реализован, на более поздних этапах развития бизнеса требуется функция относительной сортировки, а затем отдельный класс будет написан для реализации интерфейса Comparator., Перепишите внутри метод compare (), а затем этот класс необходимо передать в качестве параметра методам collections.sort и Arrays.sort класса инструмента.
(3) Класс, реализующий интерфейс Comparable, должен иметь естественный порядок, а другой не является обязательным условием.
Использовать сопоставимый
(1) При определении класса реализации реализуйте интерфейс Comparable.
(2) Протестируйте класс, чтобы убедиться, что он отсортирован естественным образом в соответствии с пользовательскими атрибутами.
В выводе консоли обнаруживается, что обычная сортировка осуществляется по зарплате, то есть по возрастанию.
Использовать компаратор
При использовании этого интерфейса вам не нужно реализовывать интерфейс при создании класса, вам нужно создать отдельный класс для реализации этого интерфейса.
(2) Создайте класс, реализующий интерфейс, и перепишите в нем метод сравнения. Это способ использования универсальных шаблонов в интерфейсах, то есть того, что является универсальным для интерфейса, а что является универсальным в реализующем классе.
Протестируйте класс, чтобы убедиться, что он отсортирован в соответствии с вашими требованиями.
Из вывода консоли видно, что первая сортировка обратная по возрасту.Когда она сортируется на clyang и herry, поскольку возраст совпадает, она продолжает сортировку по возрастанию в соответствии с зарплатой.
Выше приведены методы использования двух интерфейсов, которые также можно узнать, обратившись к статье блоггера, и которые могут быть использованы в будущем.
Русские Блоги
Разница между Comparable и Comparator в Java
Во-первых, Comparable и Comparator являются интерфейсами, Comparable находится в пакете java.lang, а Comparator находится в java.util
Оба используются для сортировки массивов или коллекций.
Сравнимость в основном заключается в том, чтобы объекты имели возможность самостоятельного сравнения, а Comparator может стать объектом для сравнения, своего рода инкапсуляцией алгоритмов сравнения в режиме стратегии.
При вызове Arrays.sort, если отсортированный объект не реализует интерфейс Comparable, необходимо указать для него Comparator, иначе он выдаст исключение ClassCastException
Когда вы вызываете Collections.sort, если отсортированный объект не реализует интерфейс Comparable, вам необходимо указать для него Comparator, который скомпилирует ошибки. Если вы не реализуете интерфейс Comparable, вам нужно указать для него Comparator, иначе он скомпилирует ошибки.
Ниже приведен код Java
Интеллектуальная рекомендация
Tree Дерево отрезков линии】 COGS 2632
Ссылочный блогАвтор:dreaming__ldxИсточник: CSDN Портал последовательности операций 【Название описания】 Последовательность длины n, вес порядкового номера в начале равен 0, есть m операций Поддерживают.
PAT-A-1046 кратчайшее расстояние [префикс и]
The task is really simple: given N exits on a highway which forms a simple cycle, you are supposed to tell the shortest distance between any pair of exits. Input Specification: Each input fi.
Как нарисовать несколько линий ROC на одном графике?
Класс коллекции JAVA
Резюме JAVA-коллекции Один, коллекция 1. Характеристики коллекций: коллекции используются только для хранения объектов, длина коллекции является переменной, и в коллекции могут храниться объекты разны.
MySQL репликация главный-подчиненный + переключатель главный-подчиненный
MySQL репликация главный-подчиненный + переключатель главный-подчиненный 05 января 2018 10:46:35Протрите протирать прыжок Количество просмотров: 5183Более Персональная категория:база данныхЭксплуатаци.