我在使用scala.collection.immutable.HashMap的更新方法时遇到问题。我没有看到它返回Map而不是HashMap的原因。如何添加新的键值对来获得新的HashMap?
答案 0 :(得分:7)
这是预期的行为。 HashMap
作为Map
的特定实现非常有用,涉及使用哈希表进行查找。
通常情况下,你会说var values: Map[String, Any] = new HashMap
,然后坐下来使用它,好像它是一个普通的'不可变的Map
。
在您new
之后,您是否有理由让您的代码知道它是HashMap?
答案 1 :(得分:7)
如果您使用的是2.7,这是因为随着时间的推移,集合库与各种实现类不一致,而不是专门处理某些方法的返回类型。这是为2.8重新设计的集合库中修复的内容之一。
如果您使用的是2.8,这是因为不推荐使用update
方法,而应使用updated
。这正确地使返回值特化。
scala> HashMap(1->1, 2->2, 3->3, 4->4).updated(1,3)
res4: scala.collection.immutable.HashMap[Int,Int] = Map((2,2), (4,4), (1,3), (3,3))
答案 2 :(得分:2)
在2.7.x中,它返回Map
,因为它可能是ListMap
或TreeMap
或其他什么,每次重新定义方法被认为是太多的工作
在2.8.x中,它应返回HashMap
- 但您必须使用updated
(不推荐update
)。