Если у меня есть список элементов, которые я хотел бы отсортировать, Java предлагает два способа сделать это.
Например, допустим, у меня есть список объектов Movie, и я хочу отсортировать их по названию.
Один из способов сделать это - вызвать версию статического метода java.util.Collections.sort () с одним аргументом и списком фильмов в качестве единственного аргумента. Поэтому я бы назвал Collections.sort (myMovieList). Для того чтобы это работало, класс Movie должен быть объявлен для реализации интерфейса java.lang.Comparable, а требуемый метод compareTo () должен быть реализован внутри этого класса.
Еще один способ сортировки - вызов версии статического метода java.util.Collections.sort () с двумя аргументами со списком фильмов и объектом java.util.Comparator в качестве аргументов. Я бы назвал Collections.sort (myMovieList, titleComparator). В этом случае класс Movie не реализует интерфейс Comparable. Вместо этого, внутри основного класса, который создает и поддерживает сам список фильмов, я бы создал внутренний класс, который реализует интерфейс java.util.Comparator, и реализовал один обязательный метод compare (). Затем я бы создал экземпляр этого класса и вызвал версию sort () с двумя аргументами. Преимущество этого второго метода заключается в том, что вы можете создавать неограниченное количество этих внутренних классов-компараторов, поэтому вы можете сортировать список объектов различными способами. В приведенном выше примере, например, вы можете использовать другой Comparator для сортировки по году создания фильма.
У меня вопрос: зачем изучать оба способа сортировки в Java, когда версия Collections.sort () с двумя аргументами делает все, что делает первая версия с одним аргументом, но с дополнительным преимуществом возможности сортировки элементы списка, основанные на нескольких различных критериях? Было бы на одну вещь меньше иметь в виду при кодировании. Вам нужно знать один базовый механизм сортировки списков в Java.