【发布时间】:2013-06-04 09:06:26
【问题描述】:
有谁知道不同风格的 Scala 列表中“包含”方法的性能特征的来源? scala 语言文档涵盖了头、尾、追加等主要操作,但似乎没有涵盖“包含”的性能。 (或者至少我没有找到任何类似的东西。)
FWIW,我需要最快的结构来有效地告诉我一个元素是否存在于其列表中。该清单在最初编译后将不会进行任何进一步的 a/m/d 操作。
这是针对 Scala 版本 2.10.0
编辑:如果它应该有所不同,这是一个文本段列表(每个约 16 到 48 个字符。)并且,为了澄清,文档确实包含一个显示查找性能的小表 - 但对于只有一小部分列表/地图实现。
【问题讨论】:
-
它必须是一个非常疯狂的列表,因为包含不是 O(n)。如果您想要快速包含,请使用 Set
-
在查找方面,这张表无处不在。当然,其中大部分是哈希(根据之前的编辑),但我想确保有足够的差异:scala-lang.org/docu/files/collections-api/collections_40.html
-
在大多数情况下,Scala 中只有一种“风格”的列表,
List,这是一个经典的、功能性(类似 Lisp)基于 cons-cell 的列表。 Scala 的List是具体类型,而Java 的List是抽象类型。 Java 调用ListScala 调用Seq,这是所有集合的抽象类型,它们保持其条目的特定顺序与添加条目的顺序相同或相反。正如其他人指出的那样,您想要的是Set,其确切目的是支持快速测试特定值的存在与否。
标签: performance list scala contains