Ответ вслух Middle Коллекции и последовательности обновлено

Sequence и производительность коллекций

Вопрос

Расскажи, как работают операции над коллекциями в Kotlin и когда ты переходишь на Sequence.

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

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

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

Коротко

Стандартные операции над списками в Kotlin жадные: map проходит всю коллекцию и создаёт новый список, потом filter создаёт ещё один. Это просто и быстро на небольших данных, но на миллионе элементов с цепочкой из пяти операций получаем пять промежуточных списков.

Что должно прозвучать в ответе

  • Операции над Iterable жадные, каждая создаёт новый список

  • Sequence ленивая, элемент проходит всю цепочку

  • Нужна терминальная операция, без неё ничего не выполнится

  • Выгодна на больших данных и с ранним выходом

  • На маленьких коллекциях список быстрее

  • Похожа на Java Stream, но без параллельности

Что могут спросить следом

  • В каком порядке вызовутся map и filter для Sequence?
  • Что делает sorted на последовательности?
  • Как сделать бесконечную последовательность?

Разбор

Стандартные операции над списками в Kotlin жадные: map проходит всю коллекцию и создаёт новый список, потом filter создаёт ещё один. Это просто и быстро на небольших данных, но на миллионе элементов с цепочкой из пяти операций получаем пять промежуточных списков. Sequence ленивая: каждый элемент проходит всю цепочку целиком, промежуточных коллекций нет, и если в конце first или take, обработка останавливается рано. Вычисление запускает только терминальная операция вроде toList, sum или first. Я беру последовательность, когда данных много, цепочка длинная или есть ранний выход, а также для бесконечных генераторов через generateSequence. Для пары операций на сотне элементов оставляю список: у последовательности накладные расходы на итераторы. И помню, что sorted всё равно соберёт всё в память.

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

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