从其他集合构建集合的有效方法

Posted

技术标签:

【中文标题】从其他集合构建集合的有效方法【英文标题】:Efficient way to build collections from other collections 【发布时间】:2015-02-27 09:28:56 【问题描述】:

在 Scala 中,与许多其他语言一样,可以使用其他集合中包含的元素来构建集合。

例如,可以堆化一个列表:

import scala.collection.mutable.PriorityQueue
val l = List(1,2,3,4)

与:

val pq = PriorityQueue(l:_*)

或:

val pq = PriorityQueue[Int]() ++ l

在我看来,这是两种截然不同的方法:

    使用可变参数构造函数和collection:_*,最终将集合转储到中间数组中。 构建一个空的目标集合并使用++ 方法添加所有源集合元素。

从美学的角度来看,我确实更喜欢第一种选择,但我担心collection:_*。我理解“在 Scala 中编程”的形式,可变参数函数被转换为接收数组的函数。

一般来说,第二个选项在效率方面是否是更好的解决方案?

【问题讨论】:

不是答案,但l.to[PriorityQueue] 也不错。 @TravisBrown 比riorityQueue(l:_*) 更漂亮,没有性能缺陷。太好了! 【参考方案1】:

在某些情况下,第二个可能更快,但显然当原始集合是 Seq(例如您的 List)时,Scala 会尝试避免创建数组;见here。

但是,实际上,除非您在紧密循环中处理大量集合,否则它可能永远不会有所作为。这类事情不值得担心,你喜欢哪一种就去做吧;你可以节省几毫秒。

【讨论】:

您提供的链接确实明确地阐明了该主题。可惜这本书在变参函数的描述上没有多扩展一点。

以上是关于从其他集合构建集合的有效方法的主要内容,如果未能解决你的问题,请参考以下文章

从 mongodb 集合中导出有效的 json

使用集合存储自定义类,只有第一个插入有效

横向解决方法:将参数从查询中的其他位置传递给集合返回函数

有效地测试元素是不是会在 jQuery 集合中

集合框架学习

集合框架学习