2013-08-02 17 views
7

Diese Zeile: var counter : Integer = jm.get(ls) in unter Code gibt eine Ganzzahl von Wert 0 zurück, wenn es null sein sollte. Warum passiert das?get Methode von hashmap gibt null zurück

Gemäß der Dokumentation gibt die get-Methode von HashMap null zurück, wenn das Element nicht gefunden wird. Der folgende Code wird die Anzahl der Elemente in einer Liste zu zählen

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

Das ist nur eine Vermutung, aber ich denke *, dass der Standardwert von "Int" in Scala 0 ist, nicht "null". Sogar 'null.asInstanceOf [Int] 'ergibt' 0 '. Wenn der Wert nicht gefunden wird, ändert sich 'null' in' 0' ... –

+0

Es steht nicht direkt mit Ihrer Frage in Verbindung, aber wenn Sie das Vorkommen von Elementen in einer Liste zählen müssen, schauen Sie sich [diese Diskussion] an. (http://stackoverflow.com/questions/11448685/scala-how-can-i-count-the-number-of-occurrences-in-a-list) – mariosangiorgio

+0

Oberhalb des Codes, auch wenn ich 'Int' anstelle von verwenden 'String' in' jm', es funktioniert immer noch. 'jm.get (1)' gibt mir '0' zurück. Wie nimmt jm Int, wenn es eine HashMap von String ist, Int – Jatin

Antwort

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

Hier in der Map-Schnittstelle Sie Schlüssel als String der Wert verwenden, ist Int. So Int Standardwert ist die 0.

var counter : Integer = jm.get(ls) 

Also hier Zähler können nur 0 Wert halten, weil in dem Zählervariablenwert kommt nicht Key.

jm.get(ls); 
1

In Scala, Int ist die AnyVal Typ (Art primitiver). Es kann nicht null sein.