getmap的hash方法不返回null

时间:2013-08-02 10:11:56

标签: scala

以下代码中的这一行:var counter : Integer = jm.get(ls)如果为null,则返回值为0的整数。为什么会这样?

根据文档,如果找不到元素,HashMap的get方法返回null。下面的代码是计算列表中元素的数量

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)
    }
  }

}

2 个答案:

答案 0 :(得分:2)

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

在Map界面中,您使用键作为字符串,值为 Int 。所以 Int 默认值为0.

    var counter : Integer = jm.get(ls)

所以这里的计数器只能保持0值,因为在计数器中变量值不是Key。

  jm.get(ls);

答案 1 :(得分:1)

在Scala中,IntAnyVal类型(原始类型)。它不能为空。