2013-08-02 51 views
7

Dòng này: var counter : Integer = jm.get(ls) trong mã dưới đây trả về một số nguyên của giá trị 0 khi nó phải là rỗng. Tại sao điều này xảy ra?lấy phương thức hashmap không trả về giá trị rỗng

Theo tài liệu, phương thức get của HashMap trả về null nếu không tìm thấy phần tử. Đoạn code dưới đây là đếm số lượng các yếu tố trong một danh sách

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

Đó chỉ là phỏng đoán, nhưng tôi nghĩ * rằng giá trị mặc định của 'Int' trong Scala là 0, không phải' null'. Thậm chí 'null.asInstanceOf [Int]' cho '0'. Vì vậy, khi giá trị không được tìm thấy, 'null' thay đổi thành' 0' ... –

+0

Nó không liên quan trực tiếp đến câu hỏi của bạn, nhưng nếu bạn cần đếm số lần xuất hiện của các mục trong danh sách, hãy xem [thảo luận này] (http://stackoverflow.com/questions/11448685/scala-how-can-i-count-the-number-of-occurrences-in-a-list) – mariosangiorgio

+0

Mã trên, ngay cả khi tôi sử dụng 'Int' thay vì 'String' trong' jm', nó vẫn hoạt động. 'jm.get (1)' trả về tôi '0'. Làm thế nào là jm lấy Int khi nó là một HashMap của String, Int – Jatin

Trả lời

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

đây trong giao diện đồ bạn đang sử dụng chìa khóa như Chuỗi giá trị là Int. Vì vậy, Int giá trị mặc định là 0.

var counter : Integer = jm.get(ls) 

Vì vậy, đây truy cập có thể giữ chỉ 0 giá trị vì trong giá trị biến truy cập đến không Key.

jm.get(ls); 
1

Trong Scala, Int là loại AnyVal (loại nguyên thủy). Nó không thể rỗng.

Các vấn đề liên quan