Scala 我应该默认使用GenSeq吗?

Scala 我应该默认使用GenSeq吗?,scala,collections,Scala,Collections,将GenSeq用作“默认”集合类型是最佳做法吗?它似乎是最通用的集合接口。但是,我没有看到它在代码示例中被广泛使用(而是使用更具体的Seq)。否。API中应该出现的最通用的集合类型是: Seq-顺序收集 集合-数学集合(无重复值) Map-关联/关联集(概念上与离散PartialFunctions相同) 唯一与上述区别无关的抽象是Traversable和Iterable。(例如,Map[K,V]既可Iterable[(K,V)]又可遍历[(K,V)] 如果对一个实际参数来说最重要的是它的元素

将GenSeq用作“默认”集合类型是最佳做法吗?它似乎是最通用的集合接口。但是,我没有看到它在代码示例中被广泛使用(而是使用更具体的Seq)。

否。API中应该出现的最通用的集合类型是:

  • Seq
    -顺序收集
  • 集合
    -数学集合(无重复值)
  • Map
    -关联/关联集(概念上与离散
    PartialFunction
    s相同)
唯一与上述区别无关的抽象是
Traversable
Iterable
。(例如,
Map[K,V]
既可
Iterable[(K,V)]
又可
遍历[(K,V)]

如果对一个实际参数来说最重要的是它的元素可以按照某种(未指定的)顺序进行检查,那么
Traversable
将捕获该特性


包含“Like”或“Once”或“Gen”的类或特征名称是内部魔法的一部分,它使Scala集合表现出“最少惊讶的原则”(其中最主要的是对其调用HOF的属性,如
map
filter
生成与调用HOF的集合的具体类型匹配的结果)。

是。Seq用于序列的非并行(顺序)集合

GenSeq是平行序列和正常序列之间的共同特征

ParSeq是使用并行性实现的非顺序序列(双关语)

GenSeq中缺少了几个方法(比如contains),但根据我的经验,它们通常是手工实现的(您可以尝试查看Seq中的实现)

资料来源:


关于scala集合(非并行集合)的另一个好页面:

注意,考虑到并行集合现在是一个单独的模块,您不再需要使用
GenSeq

因此不再有
GenSeq
(或任何
Genxxx

要依赖sbt中的scala并行集合,请将以下内容添加到build.sbt中:

在代码中,添加此导入:

我想说,这真的要看情况而定,我想如果你想让你的代码同时处理顺序和并行集合,你可以使用它
libraryDependencies +=
  "org.scala-lang.modules" %% "scala-parallel-collections" % "0.2.0"
import scala.collection.parallel.CollectionConverters._