Зачем мне нужен сопоставимый интерфейс вместо создания моего собственного метода в Java - PullRequest
0 голосов
/ 05 октября 2018

Comparable - это интерфейс, который может быть реализован в классе, но я не могу понять, почему мне нужно реализовать интерфейс, чтобы использовать Arrays.sort в моем классе.Я могу вызвать Arrays.sort без необходимости реализации интерфейса Comparable в моем классе.

Более того, интерфейс в любом случае предлагает пустой метод, чтобы я мог указать свою собственную операцию.Я прочитал другие ответы о сопоставимых, и все они говорят, что причина в том, чтобы сделать мое кодирование проще.как это проще, compareTo - это просто пустой код, который я должен определить, так как это в любом случае помогает, я могу определить свой собственный код и назвать его как угодно.

Я совершенно уверен, что за этим стоит веская причина.однако я не могу этого понять, и это действительно беспокоит меня, может кто-нибудь объяснить мне это с помощью примеров, а не примеров кода.На очень простом английском, пожалуйста, и почему это важно, и как это экономит мне время.Спасибо заранее

Ответы [ 3 ]

0 голосов
/ 05 октября 2018

Хотя у вас есть метод Arrays.sort((T[] a, Comparator<? super T> c)), который принимает явный Comparator, вы не захотите определять встроенный Comparator или создавать специальный класс Comparator, чтобы ваш код был компактным и читабельным.

Отдых - ваш выбор.У вас есть оба варианта, выберите то, что вам подходит.

0 голосов
/ 05 октября 2018

Возьмите эти числа в качестве примера: 4, 7, 2, 7, 42, 3, 4, 9 и 5.

Скажем, я прошу вас отсортировать их.Как бы вы это сделали?Вы бы отсортировали их в порядке возрастания, в порядке убывания или другим способом.

Тогда ответ: вы не знаете, как их отсортировать, потому что я не предоставил вам достаточно информации.

Arrays.sort находится в аналогичном незнании.Вы хотите попросить его что-то отсортировать для вас, но, проще говоря, Arrays.sort не не знает , как его отсортировать.Вы должны объяснить Arrays.sort, как вы хотите отсортировать массив.И способ, которым вы объясните это Arrays.sort, заключается в реализации интерфейса Comparable.

Что касается того, как этот дизайн экономит ваше время.Что ж, это делается тонким способом: если вы реализуете Comparable, тогда вы автоматически получаете возможность использовать любой метод (думать алгоритм), который знает, как работать с Comparable.То же самое относится и к реализации других интерфейсов.

0 голосов
/ 05 октября 2018

Метод public static void sort(Object[] a), указанный в Javadoc, что все объекты должны реализовывать интерфейс Comparable.Это предполагается в реализации, где вы можете найти следующую строку.

Comparable pivot = (Comparable) a[start];

Если ваши элементы не реализуют сопоставимые, это вызовет исключение во время выполнения.

Другие методы sort предназначены либо для типов, которые являются внутренне сопоставимыми (например, примитивные типы), либо требуют, чтобы вы предоставили Comparator.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...