何时使用Scala TreeMap?

时间:2015-02-04 16:42:52

标签: scala

给出以下TreeMap示例:

scala> import scala.collection.immutable.TreeMap
import scala.collection.immutable.TreeMap

scala> val tm = TreeMap( ("foo" -> List(2,1) ) )
tm: scala.collection.immutable.TreeMap[String,List[Int]] = Map(foo -> List(2, 1))

scala> tm + ("bar" -> List(300, 4) )
res0: scala.collection.immutable.TreeMap[String,List[Int]] = Map(bar -> List(300, 4), foo -> List(2, 1))

scala> res0 + ("bippy" -> List(4) )
res1: scala.collection.immutable.TreeMap[String,List[Int]] = Map(bar -> List(300, 4), bippy -> List(4), foo -> List(2, 1))

我不清楚何时在Map上使用TreeMap是有利的。什么时候?

1 个答案:

答案 0 :(得分:6)

TreeMap保证地图中的条目使用键排序,而Map不作任何保证。

因此,如果您想要在地图中对键进行排序,请使用TreeMap,否则正常的Map就足够了。我使用TreeMap的地方正为Twitter's API生成令牌。要创建令牌,需要使用以lexigraphically方式排序的url参数创建字符串。我在地图中获取url参数,然后将其放在TreeMap中以对其进行排序。

走得更远 -

Scala使用Hash Tries创建一个HashMap(这是Map的默认实现),其中数据结构是Trie并且密钥是经过哈希处理的。此外,当大小小于5(source)时,Scala会优化HashMap。它在正常情况下提供恒定的查找和插入成本。

另一方面,TreeMaps使用Red Black trees构建。红黑树的查找和插入成本为O(ln n)。

因此,当您不希望对键进行排序以获得更好的性能时,请使用Map。

更多详细信息在集合docs