Как правило, по умолчанию используется Vector
. Это быстрее, чем List
для почти всего, и более эффективно для памяти для последовательностей, размер которых превышает тривиальный. См. Эту документацию относительно производительности Вектор по сравнению с другими коллекциями. Есть некоторые недостатки, чтобы идти с Vector
. В частности:
- Обновления в голове медленнее, чем
List
(хотя и не так сильно, как вы думаете)
Еще одним недостатком до Scala 2.10 было то, что поддержка сопоставления с образцом была лучше List
, но это было исправлено в 2.10 с обобщенным+:
и :+
экстракторами.
Существует также более абстрактный, алгебраический подход к этому вопросу: какая последовательность у вас концептуально ? Кроме того, что ты концептуально делаешь с этим? Если я вижу функцию, которая возвращает an Option[A]
, я знаю, что функция имеет некоторые дыры в своей области (и, следовательно, является частичной). Мы можем применить ту же логику к коллекциям.
Если у меня есть последовательность типов List[A]
, я эффективно утверждаю две вещи. Во-первых, мой алгоритм (и данные) полностью структурированы. Во-вторых, я утверждаю, что единственное, что я собираюсь сделать с этой коллекцией, это полные, O (n) обходы. Эти двое действительно идут рука об руку. И наоборот, если у меня есть что-то типа Vector[A]
, единственное, что я утверждаю, это то, что мои данные имеют четко определенный порядок и конечную длину. Таким образом, утверждения слабее Vector
, и это приводит к его большей гибкости.
List<String> l = new ArrayList<String>()
блоги для написания Scala, чтобы вы поверили, что все используют List для того, чтобы получить постоянную коллекционную ценность, но достаточно ли общего назначения Vector, чтобы мы могли использовать его вместо List?