Это сводится к этому утверждению из javadoc :
Сравнивает два аргумента для порядка.Возвращает отрицательное целое число, ноль или положительное целое число, так как первый аргумент меньше, равен или больше второго.
Это все, что нужно для этого.Когда вы пишете компаратор, вы определяете , какой порядок вы хотите.Ключевым моментом является то, что ваш метод возвращает -1, 0 или 1. В зависимости от того, как вы хотите упорядочить эти два входящих аргумента.(и да, ему не нужно -1 или 1, только отрицательный, ноль, положительный).
Другими словами: ключевой момент заключается в том, что compare()
служит в этом контракте.Он определяет порядок на двух элементах.Это все, что нужно для этого.
При сортировке данных они будут вызываться каждый раз, когда базовый код сортировки должен знать порядок двух элементов.Таким образом, точный «порядок», в котором происходят эти вызовы, и какие аргументы передаются, зависит от фактического алгоритма сортировки и данных, которые вы собираетесь сортировать.
С этой точки зрения, ваш вопрос подразумевает, что вынекоторые продумывали всю тему.Просто поймите: вы используете компаратор, когда намереваетесь определить «пользовательский» порядок для ваших объектов / значений.
И нет смысла определять ваш «собственный» компаратор для int, Int или Integer, какэти классы уже определяют их естественный порядок, поэтому уже существует, например, Integer.compare () .Единственный вариант использования для определения собственного компаратора для такого класса - это когда вы хотите упорядочить их по-другому.Но, скорее всего, тогда вы все равно используете существующие функции компаратора и используете другие встроенные способы, например, обратный «естественный» порядок.