Блог пользователя d_i

Автор d_i, 12 лет назад, По-русски

Здравствуйте! Начал изучать java и столкнулся с проблемой компараторов. Нашлись два интерфейса Comparator и Comparable. Как собственно можно их написать и применить для банальной сортировки коллекции в более сложном порядке, чем сортировка по возрастанию. Если возможно, то прошу провести аналогию с компаратором в С++. Спасибо

  • Проголосовать: нравится
  • -5
  • Проголосовать: не нравится

»
12 лет назад, # |
Rev. 2   Проголосовать: нравится +23 Проголосовать: не нравится

В гугле достаточно информации и о том, и о другом. Но напишу, мне не жалко.

Для того, чтобы объекты класса стали сравнимы, класс T должен быть Comparable < T > , и в нём нужно описать функцию compareTo(T), возвращающую значение < 0 / 0 / > 0, если первый объект должен считаться меньше / должны считаться равными / второй должен считаться меньше. Компаратор позволяет сравнивать объекты одного типа, даже если они не Comparable. Некоторые структуры (TreeSet, PriorityQueue), а также Collections.sort позволяют задавать нужный компаратор для сравнения объектов. Нужно помнить, что TreeSet не добавляет одинаковые элементы повторно (а одинаковость определяется compareTo или переданным компаратором), и писать функцию сравнения аккуратно.

Небольшой пример использования в первой правке.