【发布时间】:2012-07-23 21:59:35
【问题描述】:
无论出于何种原因,Performance Characteristics Doc 中对此没有任何概念,所以我挖掘了源代码并发现 List 和 Queue 似乎有 O(n),因为他们遍历所有成员。 Vector 似乎有O(1),因为它只是从另一个Int 中减去一个。
现在,无论集合是面向追加还是面向前置都无关紧要,但其中任何一个都必须是O(1),并且不需要高性能apply。
Vector 是正确的选择吗?你会建议哪个?
【问题讨论】:
-
在极少数情况下
List比Vector更好。默认为Vector,除非你有充分的理由不这样做。 -
@LuigiPlinge 您是否建议使用
Vector作为默认的Seq实现?这种观点至少对我来说似乎不寻常,因为链表遍布函数式编程世界并且是默认的集合类型。此外,Vector作为一个更复杂的结构,在用于head、tail和prepend操作时必然会表现得更差。它还必须占用更多内存。您能否参考有关此的任何研究/讨论/阅读材料? -
也很有趣:this question 表明
Vector比List具有更好的内存占用。 曾在其中一个邮件列表上讨论过Vector作为scala.Seq的默认类型,但我再也找不到了。 -
@LuigiPlinge 谢谢。第一个链接上的答案有点证明
List在您知道自己在做什么时会更好(即头部、尾部和前置),Vector虽然在这些操作上稍慢一点,但对于大多数其他,因此更适合一般类型的集合。
标签: scala immutability scala-collections