簡體   English   中英

咨詢:為什么這個哈希表打破我?

[英]Inquiry: Why is this hashtable breaking on me?

我無法理解下面編寫的代碼的行為。 看到:

Set<String> keys = hashmap.keySet();
Iterator<String> keyiterator = keys.iterator();
while(keyiterator.hasNext()) {
    out = "";
    String s = keyiterator.next();
    ArrayList<String> temp = hashmap.get(s);

    out = out + temp.get(0);
    for(int i = 1; i < temp.size(); i ++)
    {
        String s1 = temp.get(i);
        s1 = s1.replaceAll("\\[\\[", "");
        s1 = s1.replaceAll("\\]\\]", "");
        s1 = s1.trim();
        System.out.println(s1);

        ArrayList<String> temp2 = hashmap.get(s1);

        if(temp2 != null) out = out + " " + temp2.get(0);
    }
    System.out.println(out);
}

注意:

hashmap的格式為<String, ArrayList<String>>

ArrayList在位置0處具有數值。例如,

Key = Doc1  List = 0, Poland, Iceland, Candy
Key = Doc2  List = 1, UK, Yule
Key = Poland List = 2, Doc1, Doc2
Key = Iceland List = 3, Doc1, Poland 

每個列表條目至少包含數字條目。

問題:

ArrayList<String> temp = hashmap.get(s); 返回條目的列表。 但是ArrayList<String> temp2 = hashmap.get(s1); 為條目返回null。 換句話說,列表是空的。

問題:簡單地說。 為什么? 一旦我們剝離了左右方塊(參見上面代碼的replaceALL部分),字符串列表就是哈希表中的鍵名。 我試過這個:

ArrayList<String> temp2 = hashmap.get("poland");

其中“poland”是哈希表的已知文檔/關鍵字。 但它什么也沒有回報。 但是,作為一個完整性檢查,如果我把ArrayList<String> temp2 = hashmap.get(s); 所以它再次查看我上面使用的鍵,它可以第二次找到該鍵值就好了。

有人可以向我解釋出現了什么問題嗎? 我保證會給那些回答對我的問題有意義的人。

您的問題是您從其中一個ArrayList對象(例如"Poland""Iceland"等)中獲取值,然后在地圖中查找具有該值作為其的條目。 但鍵是"Doc1""Doc2"等,而不是"Poland""Iceland"

簡而言之,前者( ArrayList<String> temp = hashmap.get(s) )可以工作,因為這是關鍵,如下所示:

String s = keyiterator.next();

也,

“...為條目返回null。換句話說,列表為空。”

我不同意這一點。 如果使用地圖中不存在的鍵,它只返回null。

我注意到你正在ArrayList上的額外字符。 可能是您的鍵值和ArrayList值以不同方式被修剪?

例如: s1 = "Poland"但哈希表中的實際鍵,即你的s,是s = " Poland "

暫無
暫無

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

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