2012-04-16 81 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