tgoop.com/android_live/362
Last Update:
Collections vs Sequences
#разработка #статьи
В Kotlin существует две сущности, которые позволяют выполнять операции на последовательности элементов: Collections
и Sequences
. И они значительно отличаются тем, как выполняют работу под капотом.
Начнём с того, что они по-разному работают над элементами.
В коллекциях операторы применяются для всей входящей цепочки объектов. То есть во время обработки создаётся новый, промежуточный список объектов, к элементам которого применяется оператор.
В последовательностях вся цепочка операторов применяется для каждого из элементов.
Можно сказать, что последовательности — это бесконечная сущность, а коллекции — конечная.
Когда же применять каждый из них?
1) Большое число операторов в цепочке. Например, мы хотим применить цепочку из операторов filter()
, map()
и take()
. Из-за особенности работы коллекций, описанной выше, тут явно побеждают последовательности, так как на каждом из этапов не будет создаваться новый промежуточный список. Особое преимущество будет при наличии оператора take(), так как обработается только 5 элементов из последовательности.
2) То же самое и для операторов contains()
, indexOf()
, any()
, none()
, find()
. Во всех них нужно найти только первый элемент, и нет смысла работать со всей цепочкой.
3) Когда же у вас есть оператор toList(), toSet(), то тут побеждают коллекции, так как возвращаемый список будет создан только один раз.
4) При наличии оператора sorted()
или distinct()
также стоит использовать коллекции. Последовательность, из-за особенности работы под капотом, создаст промежуточный список.
Также помните, что разница будет заметна только на довольно больших объёмах данных. Если в вашей коллекции 10-20 элементов, то вы не увидите никакой разницы.
Данная шпаргалка будет полезна при очередном собеседовании, так как это довольно частый вопрос.
Ну и тут ещё больше кейсов с иллюстрациями, а тут отличное сравление этих двух классов.
BY Android Live 🤖

Share with your friend now:
tgoop.com/android_live/362