Scala 不同集合类型的性能和使用情况比较
我已经在Scala编程几个月了。我仍然对许多不同的收藏感到困惑 是否有某个页面/文章显示每种类型最适合哪种类型 Scala的问题是它有太多不同的类型,然后你有类似数组的东西直接映射到Java数组,然后你有类似“Set”的东西实际上是一个“trait”,但你可以像普通类一样使用它,尽管我的理解是trait就像一个接口。文档中说“要实现一个具体的集合,需要定义以下方法:…”,但实际上我可以很好地使用它 整件事让我很困惑。来自C#/.NET,事情非常清楚,我没有像“LinkedHashMap”和“LinkedHashSet”这样的奇怪类型。使用trait(接口)Seq(有序列表)、Map(键值)、Set、IndexedSeq、Array(对于Java原语)类型,并让编译器选择实现。如果你看源,你会看到每个源都有一个伴星。这将使用工厂为您查找实现 这一页帮助了我。 关于具体集合的部分将介绍实现 Seq伴生对象:Scala 不同集合类型的性能和使用情况比较,scala,scala-collections,Scala,Scala Collections,我已经在Scala编程几个月了。我仍然对许多不同的收藏感到困惑 是否有某个页面/文章显示每种类型最适合哪种类型 Scala的问题是它有太多不同的类型,然后你有类似数组的东西直接映射到Java数组,然后你有类似“Set”的东西实际上是一个“trait”,但你可以像普通类一样使用它,尽管我的理解是trait就像一个接口。文档中说“要实现一个具体的集合,需要定义以下方法:…”,但实际上我可以很好地使用它 整件事让我很困惑。来自C#/.NET,事情非常清楚,我没有像“LinkedHashMap”和“Li
object Seq extends SeqFactory[Seq] {
/** $genericCanBuildFromInfo */
implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, Seq[A]] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]]
def newBuilder[A]: Builder[A, Seq[A]] = immutable.Seq.newBuilder[A]
}
查看factory源代码,了解apply如何初始化集合
abstract class GenericCompanion[+CC[X] <: GenTraversable[X]] {
/** The underlying collection type with unknown element type */
type Coll = CC[_]
/** The default builder for `$Coll` objects.
* @tparam A the type of the ${coll}'s elements
*/
def newBuilder[A]: Builder[A, CC[A]]
/** An empty collection of type `$Coll[A]`
* @tparam A the type of the ${coll}'s elements
*/
def empty[A]: CC[A] = newBuilder[A].result
/** Creates a $coll with the specified elements.
* @tparam A the type of the ${coll}'s elements
* @param elems the elements of the created $coll
* @return a new $coll with elements `elems`
*/
def apply[A](elems: A*): CC[A] = {
if (elems.isEmpty) empty[A]
else {
val b = newBuilder[A]
b ++= elems
b.result
}
}
}
抽象类GenericCompanion[+CC[X]
我已经在Scala中编程几个月了,现在我仍然在工作
被许多不同的收藏搞糊涂了
您可能只需要一些时间就可以习惯。如果Scala看起来完全像另一种语言,它就不是Scala了,对吗?:)每种编程语言都有其优缺点
是否有一个页面/文章显示每种类型最好
适合做什么
实际上,您需要一篇关于数据结构的一般性文章。例如,如果您需要在集合中存储数据,并且需要在不修改集合的情况下快速访问数据,那么数组是合适的。数组、列表、集合、映射等是基本上在每种语言中表现相同的数据结构。不同之处在于语法ntax
Scala的问题是它有太多不同的类型,然后
有一种类似数组的东西,它直接映射到Java数组,
然后你就有了类似于“集”的东西,这实际上是一种“特质”,但是你
即使我的理解是
trait就像一个接口,文档中说“实现
具体设置时,需要定义以下方法:…“但是
事实上我可以用得很好
你应该看看@sam已经发布的链接:这里还有一个:hmm..使用数组(..)怎么样?如果我使用IndexedSeq(..)这真的可以转化为数组吗?你怎么知道它实际上使用的是哪种类型?我应该关心这一点吗?听起来数组是Java包装的数组,在使用基元类型时,你会获得更好的性能。我通常使用数组作为索引查找集合类型,因为它更容易键入。可能有一些有用的补充这些问题答案中的nal信息:以及