[英]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.