2010-04-11 59 views

回答

7

这是预期的行为。 HashMap作为Map的具体实施方式是最有用的,涉及使用散列表进行查找。

通常情况下,你会说var values: Map[String, Any] = new HashMap,然后坐下来使用它,就好像它是普通的ol'immutable Map

你有没有理由让你的代码知道它是一个HashMap后,你已经new'如上所述?

+0

Aaaaaah,我明白了。最后我得到了我的代码工作!谢谢! – 2010-04-11 20:43:40

+0

很高兴我能帮到你。 – sblom 2010-04-11 20:44:01

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.7.x,它返回一个Map,因为它可能是一个ListMapTreeMap或什么的,它被认为是太多的工作,每次重新定义方法。

在2.8.x中,它应该返回一个HashMap - 但您必须使用updatedupdate已被弃用)。

相关问题