Из того, что я прочитал, следует предпочесть использовать общий Seq при определении последовательностей вместо конкретных реализаций, таких как List
или Vector
.Преобразование между различными реализациями Seq в Scala
Хотя у меня есть части моего кода, когда последовательность будет использоваться в основном для полного обхода (сопоставление, фильтрация и т. Д.) И некоторых частей моего кода, где одна и та же последовательность будет использоваться для операций индексирования (indexOf, lastIndexWhere).
В первом случае, я считаю, что лучше использовать LinearSeq
(implem является List
), тогда как во втором случае это лучше использовать IndexedSeq
(implem является Vector
).
Мой вопрос: нужно ли я в явном виде перевести метод toList
и toIndexedSeq
в мой код или сделать преобразование под капотом разумным образом? Если я использую эти преобразования, это штраф за производительность при переходе между IndexedSeq
и LinearSeq
?
Заранее спасибо
Спасибо очень ясно !! –
Эти тесты не очень надежны, чтобы пройти. Нетрудно найти случаи, когда «Список» превосходит «Вектор». Например, если они уже являются объектами (без бокса), а коллекция - только, например. 22 long, 'List' выигрывает на карте примерно на 20%. 'List' создает больше мусора; в зависимости от влияния GC, он может быть почти бесплатным или довольно дорогостоящим. –