2012-07-25 53 views
1

無論出於何種原因有在Performance Characteristics Doc上沒有概念,所以我挖成的來源和發現,ListQueue似乎有O(n)的,因爲它們迭代直通所有成員。 Vector似乎有O(1),因爲它只是從另一個減去一個Int。現在最佳高性能不變的序列,其長度

,不要緊集合是否爲append-或預先準備爲主,但其中一方必須是O(1),而且也沒有必要高性能apply

Vector正確的選擇?你會建議哪個?

+0

有很少的情況下,'List'比'Vector'好。除非你有充分的理由不要,否則默認爲'Vector'。 – 2012-07-25 17:38:44

+0

@LuigiPlinge你是否建議使用'Vector'作爲默認的'Seq'實現?這個觀點對我來說似乎至少是不尋常的,因爲鏈接列表遍佈函數式編程世界,並且是默認的集合類型。另外'Vector',作爲一個更復雜的結構,在用於'head','tail'和'prepend'操作時,不可避免地會表現得更糟。它必須佔用更多的內存。你能請參閱關於此的任何研究/討論/閱讀材料嗎? – 2012-07-25 20:44:47

+1

另請參見[這個問題](http://stackoverflow.com/questions/6928327/when-should-i-choose-vector-in-scala) – 2012-07-25 23:30:07

回答

5

Vector是正確的選擇嗎?

是的。另一種方法是在List周圍創建自己的不可變包裝,並將其大小作爲常量添加,但如果要允許所有標準收集操作,則這將是很多工作。堅持Vector

+0

謝謝!還有評論中的鏈接 – 2012-07-26 02:14:23