Тёмный

Функциональный интерфейс Comparable 

Oleksandr Tsymbaliuk
Подписаться 6 тыс.
Просмотров 1,2 тыс.
50% 1

Программу данного курса вы можете посмотреть по ссылке - docs.google.co...
Comparable - функциональный интерфейс. Этот интерфейс устанавливает
отношение полного порядка для объектов класса, который его реализует. Это отношение
порядка называется естественным порядком (natural ordering), а метод compareTo
называется его естественным методом сравнения (natural comparison method).
Используется для сравнения объектов между собой, в задачах сортировки и поисках
минимального и максимального элемента в последовательностях.
Ссылка на конспект этой лекции - drive.google.c...

Опубликовано:

 

24 сен 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 14   
@locky1827
@locky1827 2 года назад
Очень круто объясняешь, разжевываешь такие вещи. Большое спасибо!!!!!
@НовыйДом-н3п
@НовыйДом-н3п Год назад
Спасибо большое за ваши видео они помогают понять джава максимально впитывая концепцию
@don_alberto
@don_alberto 3 года назад
ой балдёж ! спасибо
@РоманИванов-ъ2з
Спасибо за видео, но я думаю, что скажу, что несколько заумно вышло, в объяснении этих интерфейсах сравнения нигде не видел, чтобы так парились на счет того, что они должны быть ассимитричные и тп, это мне кажется и так понятно, а всякие естественные порядки, не перегруз ли это мозга лишней информацией?
@oleksandrtsymbaliuk
@oleksandrtsymbaliuk Год назад
Как я много раз говорю своим студентам, знать нужно на уровне спокойного чтения и понимания спецификаций. Так, что стараюсь давать материал так, что бы студент спокойно читал после этого спецификации и легко оперировал понятиями из них. А эти понятия описаны с документации Oracle.
@РоманИванов-ъ2з
@@oleksandrtsymbaliuk спасибо за ответ, но для меня было важнее после просмотра важнее дополнительно понять разницу и когда пользоваться одним интерфейсом, а когда другим, и что по сути можно не использовать слово implements если comparator используется в лямбдах
@weetalic6167
@weetalic6167 3 года назад
Цей інтерфейс по суті не є функціональним, хоча і відповідає всім умовам. Ось тут обговорюють цю проблему: stackoverflow.com/questions/56827701/is-comparable-interface-a-functionalinterface
@oleksandrtsymbaliuk
@oleksandrtsymbaliuk 3 года назад
Как абсолютно верно ответили в том споре, спецификация языка Java определяет docs.oracle.com/javase/specs/jls/se11/html/jls-9.html#jls-9.8 что это функциональный интерфейс. И возможно мое мнение субъективно, но именно спецификация языка определят все аспекты с ним связанные.
@weetalic6167
@weetalic6167 3 года назад
​@@oleksandrtsymbaliuk Але ж ніхто його не використовує як функціональний інтерфейс, він випадково відповідає усім умовам функціонального інтерфейсу. То чи є сенс підкреслювати той факт, що він є функціональним?
@weetalic6167
@weetalic6167 3 года назад
@@oleksandrtsymbaliuk Ось документація оракл. Для компаратора вони підкреслюють, що це функціональний інтерфейс docs.oracle.com/javase/8/docs/api/java/util/Comparator.html, а для Comparable нема жодного слова про функціональність docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html
@oleksandrtsymbaliuk
@oleksandrtsymbaliuk 3 года назад
Опять же выскажу свое мнение. Разработка программного обеспечения все таки инженерная деятельность. Основную роль играет стандарт, в данном случае спецификация языка. В спецификации указанно, что это функциональный интерфейс. Все, что идет сверх спецификации является домыслами или гипотезами. Т.е использование или не использование, случайно ли стал этот интерфейс функциональный или нет, стоит над ним аннотация или нет это не играет никакой роли. Это домыслы сверх спецификации и принимать их в расчет как минимум не стоит. Ситуация изменится только тогда, когда в спецификации языка появится примечание о том что интерфейсы типа Comparable функциональными не являются. В спецификации Java 11 ничего такого нет.
@Snowmanver2
@Snowmanver2 2 года назад
public class Rectangle implements Comparable { private int length; private int width; private int area; public Rectangle(int length, int width) { this.length = length; this.width = width; this.area = getArea(length, width); } /** * A = wl * @param length l * @param width w * @return product of length and width */ private int getArea(int length, int width) { int A = 0; A = length * width; return A; } @Override public int compareTo(Rectangle other) { if(other == null) throw new NullPointerException(); if(this.area > other.area) return 1; if(this.area < other.area) return -1; return Integer.compare(this.area,other.area); } @Override public String toString() { return "Rectangle{" + "area=" + area + '}'; } } public class Main { public static void main(String[] args) { Rectangle rec1 = new Rectangle(8,12); Rectangle rec2 = new Rectangle(4,6); Rectangle rec3 = new Rectangle(2,4); Rectangle rec4 = new Rectangle(4,6); Rectangle rec5 = new Rectangle(1,9); List rectangles = new ArrayList(); rectangles.add(rec1); rectangles.add(rec2); rectangles.add(rec3); rectangles.add(rec4); rectangles.add(rec5); Collections.sort(rectangles); for (Rectangle rectangle : rectangles) { System.out.println(rectangle); } } }
@oleksandrtsymbaliuk
@oleksandrtsymbaliuk 2 года назад
Имена переменных в Java принято записывать с маленькой буквы. Такой код неудачен: int A = 0; Также плохой практикой является хранение в списках объектов класс которых не переопределяет equals, hashCode Так, что пока такой код также не очень хорош. List rectangles = new ArrayList(); В остальном решение верное
@Snowmanver2
@Snowmanver2 2 года назад
@@oleksandrtsymbaliuk спасибо за Ваш комментарий!
Далее
Тип var в Java
14:41
Просмотров 2,6 тыс.