有序地图是否知道如何有效搜索Scala中的密钥? 想象一下,我有一张地图:
val unorderdMap: Map[Int, String] = ...
val orederedMap: Map[Int, String] = unorderedMap.sort
在orderedMap中对键的查找操作是否更快?
unorderedMap.get(i) //Slower???
orderedMap.get(i) //Faster???
编译器是否知道如何有效搜索?
编译器是否在每种情况下以不同方式执行查找操作?
*编辑: 我有一个
case class A(key: Int, value1: String, value2: String, ...)
val SeqA: Seq[A] = Seq(A(1, "One", "Uno", ...), A(2, "Two", "Duo",...), ..., A(20000,... ,...))
我希望对密钥进行快速查找操作(这是我唯一感兴趣的) 是否更好地制作地图,如:
val mapA = SeqA.map(a => a.key -> a)(collection.breakOut)
或者将它作为一个序列(并且可能对它们进行排序)更好。 如果我把它作为地图我应该订购还是不订购? *元素在附近 20K - 30K元素!
答案 0 :(得分:2)
排序地图通常(*)比任何语言的哈希地图慢。这是因为与具有O(1)摊销复杂度的哈希映射相比,有序映射具有O(log n)复杂度。
您应该查看相关的Wiki页面,以获得更深入的解释。
(*)这取决于许多因素,例如地图的大小。对于小集合,如果二进制搜索的排序数组适合缓存,则它可能会做得更好。