为什么这是错的?
for (Entry<String, HashMap> temp : wordCountforFile.entrySet()) {
System.out.println(temp.getKey());
for(Entry<String, Integer> temp1: temp.getValue()){
//Wrong?
}
}
其中: HashMap wordCountforFile = new HashMap();
HashMap<String, Integer> wordCount = new HashMap<String, Integer>();
和
wordCountforFile.put("Any String", wordCount);
答案 0 :(得分:3)
这是错误的,因为您没有为HashMap temp
指定泛型。此外,如果您期望entrySet()
,则应迭代最里面循环中的Map.Entry
。你应该使用:
for (Entry<String, HashMap<String, Integer>> temp : wordCountforFile.entrySet()) {
System.out.println(temp.getKey());
for(Entry<String, Integer> temp1 : temp.entrySet()){
// ...
}
}
作为旁注,我通常会发现,如果你有一张地图的地图,这意味着其中一张地图在逻辑上代表某种类型的实体,如果你将它移动到它自己的类,可以简化它。只是一个想法。
答案 1 :(得分:1)
HashMap<String, HashMap<String, Integer>> wordCountforFile = new HashMap<String, HashMap<String, Integer>>();
HashMap<String, Integer> wordCount = new HashMap<String, Integer>();
wordCountforFile.put("Any String", wordCount);
for (Map.Entry<String, HashMap<String, Integer>> temp : wordCountforFile.entrySet()) {
System.out.println(temp.getKey());
for(Map.Entry<String, Integer> temp1: temp.getValue().entrySet()){
}
}
}
wordCountForFile未使用泛型定义。如果没有泛型,则应该进行显式类型转换。
for(Map.Entry<String, HashMap<String, Integer>> temp : ((Set<Map.Entry<String, HashMap<String, Integer>>>) wordCountforFile.entrySet()))
但这并不总是安全的,因为如果条目不是String&amp;类型,它会导致ClassCastException。 HashMap中。如果已知地图中的键和值的类型可以避免ClassCastException,那么使用泛型总是更好。
temp.getValue()返回String&amp;的映射。整数。如果要迭代此映射中的每个条目,请使用temp.getValue()。entrySet()