为什么Scala不可变HashMap方法返回映射?

为什么Scala不可变HashMap方法返回映射?,scala,hashmap,immutability,Scala,Hashmap,Immutability,我在使用scala.collection.immutable.HashMap的更新方法时遇到问题。我看不出它返回Map而不是HashMap的原因。如何获得添加了新键值对的新HashMap?这是预期的行为HashMap作为Map的具体实现最有用,它涉及使用哈希表进行查找 通常,您会说var-values:Map[String,Any]=newhashmap,然后坐下来像使用普通的ol'immutableMap一样使用它 你有没有理由让你的代码知道它是一个HashMap,在你像上面那样新建它之后?如

我在使用scala.collection.immutable.HashMap的更新方法时遇到问题。我看不出它返回Map而不是HashMap的原因。如何获得添加了新键值对的新HashMap?

这是预期的行为
HashMap
作为
Map
的具体实现最有用,它涉及使用哈希表进行查找

通常,您会说
var-values:Map[String,Any]=newhashmap
,然后坐下来像使用普通的ol'immutable
Map
一样使用它


你有没有理由让你的代码知道它是一个HashMap,在你像上面那样新建它之后?

如果你使用的是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.7.x中,它返回一个
Map
,因为它可能是一个
ListMap
TreeMap
或任何东西,并且每次重新定义方法被认为工作量太大

在2.8.x中,它应该返回一个
HashMap
——但是您必须使用
updated
update
已弃用)