Ответ
Коллекция (например, List, Set) хранит все элементы в памяти и выполняет операции немедленно (eager evaluation). Например, list.map { it * 2 } сразу создает новый список.
Последовательность (Sequence) обрабатывает элементы лениво (lazy evaluation), выполняя операции только при необходимости (например, при вызове toList() или forEach). Это экономит память для больших данных. Пример:
val seq = sequenceOf(1, 2, 3).map { it * 2 } // Ничего не вычисляется
println(seq.toList()) // [2, 4, 6] - вычисление здесь
Ключевые отличия:
- Вычисления: коллекции — eager, последовательности — lazy.
- Память: последовательности не хранят промежуточные результаты.
- Порядок операций: у коллекций каждая операция проходит по всем элементам, у последовательностей — поэлементно (например,
map→filterвыполняется для каждого элемента по очереди).