2012-04-16 80 views
0

的不同表示我一直在玩弄斯卡拉HashMap和我已经注意到了HashMap的两个不同的表示。我在想,如果有人能解释的区别:斯卡拉的HashMap

Map(123 -> 1) 

{123=1} 

谢谢!

+0

你知道吗?val m = Map((123,1),(456,2))? – 2012-04-16 03:49:44

回答

5

在哪里你见过{123=1}?它不是Scala中的标准表示,但它的 Java为其地图定义toString的方式。

val sm = Map(1->1, 2->2) // Map(1 -> 1, 2 -> 2) 

val jm = new java.util.HashMap[Int,Int]() 
jm.put(1,1) 
jm.put(2,2) 
jm 
// java.util.HashMap[Int,Int] = {1=1, 2=2} 
+2

对不起,我明白了。当您使用java.util.HashMap而不是scala时,会发生{123 = 1}。 – Ken 2012-04-16 03:28:38

+0

@肯,啊,是的,这是有道理的。 – dhg 2012-04-16 03:29:11

2

->是一种创建元组的方法。它本身并不直接与地图有关。因此,例如123 -> 1返回一个元组(123, 1)。您可以在REPL试试这个:

val m = Map(123 -> 1, 456 -> 2) 

是:

scala> 123 -> 1 
res1: (Int, Int) = (123,1) 

您可以通过给object Mapapply方法,这是你在做什么,当你做到这一点提供的元组创建地图相同

val m = Map.apply(123 -> 1, 456 -> 2) 

相同

val m = Map.apply((123, 1), (456, 2)) 

其创建Map有两个条目,一个具有密钥123和值1,另一个具有密钥456和值2