Comparing 2 Flashcards

1
Q

Можно ли использовать лямбда-выражения для создания Comparator?

A

Да, начиная с Java 8, лямбда-выражения упрощают создание Comparator. Например:
Comparator<Person> byName = (p1, p2) -> p1.getName()
.compareTo(p2.getName());</Person>

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Что такое “цепочка компараторов”?

A

Цепочка компараторов — это техника, при которой несколько Comparator-ов объединяются для сравнения объектов по нескольким критериям. Если первый компаратор возвращает 0 (равенство), используется следующий, и так далее. Пример:
Comparator<Person> byNameThenAge = Comparator.comparing(Person::getName) .thenComparing(Prson::getAge);</Person>

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Что произойдет, если при использовании Comparator передать null в метод compare()?

A

Передача null в метод compare() приведет к исключению NullPointerException, если не была предусмотрена логика обработки null.
Для обработки можно использовать специальные компараторы, такие как Comparator.nullsFirst() и Comparator.nullsLast():

Comparator<Person> byName = Comparator.nullsFirst
(Comparator.comparing(Person::getName));</Person>

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Можно ли реализовать сравнение объектов без использования Comparable или Comparator?

A

Да, можно реализовать сравнение объектов напрямую через методы класса.
Однако для использования стандартных механизмов сортировки и структур данных, таких как TreeSet или Collections.sort(), рекомендуется использовать Comparable или Comparator.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Что происходит при сравнении объектов с использованием методов equals() и compareTo()?

A
  • equals() проверяет логическое равенство. Объекты могут быть равны по equals(), но это не означает, что они будут иметь одинаковый порядок по compareTo().
  • compareTo() используется для упорядочивания и не обязательно зависит от метода equals().
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Что должно быть соблюдено при реализации compareTo() и equals()?

A

Рекомендуется, чтобы объекты, которые равны по equals(), также были равны по compareTo().
Однако это не является обязательным требованием.
Нарушение этого правила может привести к неожиданным результатам при работе с коллекциями, основанными на сортировке (например, TreeSet).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Что такое “стабильная сортировка”?

A

Стабильная сортировка сохраняет относительный порядок равных объектов. В Java метод Collections.sort() является стабильным, что означает, что объекты, которые равны по compareTo() или Comparator, сохраняют свой исходный порядок в коллекции.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Как влияет изменение состояния объекта на его сравнение?

A

Если поля объекта, используемые для сравнения, изменяются после того, как объект был помещён в сортированную коллекцию (например, TreeSet или PriorityQueue), это может привести к некорректной работе коллекции. Поэтому такие поля должны оставаться неизменными после добавления объекта в структуру данных.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly