2013-08-02 5 views
7

この行:var counter : Integer = jm.get(ls)以下のコードでは、nullにする必要がある場合は0の整数を返します。なぜこれが起こっているのですか?hashmapのgetメソッドがnullを返さない

文書によると、要素が見つからない場合、HashMapのgetメソッドはnullを返します。以下のコードは、リストあなたが文字列値はのIntであるように、キーを使用しているMapインタフェースでここ

import scala.collection.JavaConversions._ 

object Tester { 

    def main(args: Array[String]) { 


    var listOfLinks : java.util.Set[String] = new java.util.TreeSet[String] 
    listOfLinks.add("1") 
    listOfLinks.add("1") 
    listOfLinks.add("1") 
    listOfLinks.add("2") 
    listOfLinks.add("3") 
    listOfLinks.add("3") 
    listOfLinks.add("3") 
    listOfLinks.add("3") 

    var l: java.util.List[String] = new java.util.ArrayList[String] 
    var jm: java.util.Map[String, Int] = new java.util.HashMap[String, Int]; 

    for (ls <- listOfLinks) { 
     var counter : Integer = jm.get(ls) 
     if (counter == null) { 
     jm.put(ls, 1) 
     } else { 
     counter = counter + 1 
     jm.put(ls, counter) 
     } 
    } 

    for(jmv <- jm){ 
     println(jmv._1+" , "+jmv._2) 
    } 
    } 

} 
+0

これは単なる推測ですが、Scalaの 'Int'のデフォルト値は' null'ではなく0であると私は考えています。 'null.asInstanceOf [Int]'は '0'を返します。値が見つからない場合、 'null'は' 0'に変わります... –

+0

あなたの質問には直接関係しませんが、リスト内の項目の出現を数える必要がある場合は[このディスカッション] (http://stackoverflow.com/questions/11448685/scala-how-can-i-count-the-number-of-occurrences-in-a-list) – mariosangiorgio

+0

上記のコードでは、 'jm'の' String'は、それでも動作します。 'jm.get(1)'は私に '0'を返します。 jmがHashMapのString、Intの場合、どのようにIntを取るのですか? – Jatin

答えて

2
var jm: java.util.Map[String, Int] = new java.util.HashMap[String, Int]; 

の要素数をカウントしています。だから、のIntデフォルト値は0です。

var counter : Integer = jm.get(ls) 

あるカウンタ変数の値にキーではない来るので、そこでここではカウンターのみ0の値を保持することができます。 Scalaで

jm.get(ls); 
1

IntAnyValタイプ(プリミティブの一種)です。ヌルにすることはできません。

関連する問題