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