簡體   English   中英

HashTable中的空對象

[英]null object in HashTable

當我嘗試map.get(k)哈希表中的索引時,它返回null並且想知道它是否是csv到哈希表的代碼。

public static void main(String[] args) throws ParseException, IOException {

    BufferedReader br = new BufferedReader(new FileReader("primes.csv"));
    String line =  null;
    Hashtable<String, String> map = new Hashtable<String, String>(100);

    while((line = br.readLine()) != null){
        String str[] = line.split(",");

        map.put(str[0], str[1]);
    }
    br.close();
    System.out.println(map);

    int k;

    k = Integer.parseInt(JOptionPane.showInputDialog(f,"Enter an integer k whee"
            + " 3 < k < 1229: "));

    while (k <= 3 || k >= 1229){
       k = Integer.parseInt(JOptionPane.showInputDialog(f,"Sorry try again: "));
    }

    JOptionPane.showMessageDialog(f, "The "+ k +"th prime number is " + map.get(k));

}   

另外我的csv文件包含

1,1(下一行)

2、2(下一行)

3、3(下一行)

4、5(下一行)

5、7等

您在地圖中使用String鍵,並且想要使用Integer鍵從其中檢索對象:

String str[] = line.split(",");
...
map.put(str[0], str[1]);
...
int k;
...
map.get(k);

這不可能。
這些不是等於equals()equals()
因此,在兩種情況下,請使用與鍵相同的類型。
例如,在兩種情況下都使用String ,可以通過以下方式更改get()調用:

map.get(String.valueOf(k));

此外, Hashtable是線程安全類(效率也不高)。
您的代碼示例中不需要此功能。 一個HashMap就足夠了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM