我无法理解下面编写的代码的行为。看到:
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);
returns为该条目null。换句话说,列表是空的。
问题:简单地说。为什么?一旦我们剥离了左右方块(参见上面代码的replaceALL部分),字符串列表就是哈希表中的键名。我试过这个:
ArrayList<String> temp2 = hashmap.get("poland");
其中“poland”是哈希表的已知文档/关键字。但它什么也没有回报。然而,作为一个完整性检查,如果我把ArrayList<String> temp2 = hashmap.get(s);
这样看着我再次使用上面的键,它可以第二次找到该键值就好了。
有人可以向我解释出现了什么问题吗?我保证会给那些回答对我的问题有意义的人。
我注意到你在ArrayList
上做了一些额外的字符修剪。难道你的关键值和你的ArrayList
值会以不同的方式被削减吗?
例如:s1 = "Poland"
但哈希表中的实际密钥,即你的s,是s = " Poland "
?
你的问题是你从一个ArrayList
对象(例如"Poland"
,"Iceland"
等)中获取了一个值,然后在地图中查找具有该值作为其键的条目。但关键是"Doc1"
,"Doc2"
等,而不是"Poland"
和"Iceland"
。
简而言之,前者(ArrayList<String> temp = hashmap.get(s)
)的作用是因为这是关键,如下所示:
String s = keyiterator.next();
也,
“...为条目返回null。换句话说,列表为空。”
我不同意这一点。如果使用地图中不存在的键,它只返回null。