Выбор ответа Senior Коллекции и последовательности обновлено

Устойчивость сортировки в Kotlin

Вопрос

Список людей сначала отсортировали по имени, потом результат sortedBy { it.age }. В каком порядке окажутся люди одного возраста?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: По алфавиту: сортировка в Kotlin устойчивая. sorted в Kotlin на JVM устойчивые (используют TimSort для объектов): элементы с равным ключом сохраняют взаимный порядок.

Варианты ответа

  1. По алфавиту: сортировка в Kotlin устойчиваяправильный ответ
  2. В случайном порядке: сортировка неустойчивая
  3. В обратном алфавитном: равные меняются местами
  4. В порядке исходного списка до первой сортировки

Разбор

sorted* в Kotlin на JVM устойчивые (используют TimSort для объектов): элементы с равным ключом сохраняют взаимный порядок. Поэтому после второй сортировки люди одного возраста останутся упорядочены по имени. Тем не менее понятнее явно: sortedWith(compareBy({ it.age }, { it.name })).

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.