我有一个关于迭代一个hashmap的问题:
Map<String, Integer> map = new HashMap<String, Integer>();
我想迭代这个hashmap并使用以下代码打印出键和值对:
Iterator iterator = portMap.keySet().iterator();
但是它表明我将portMap.keySet().iterator();
强制转换为(Iterator)portMap.keySet().iterator()
;但是iterator()
已经作为迭代器返回,为什么我需要强制转换呢?我检查了一些其他代码,没有关于iterator()
的返回值的强制转换,原因是什么,以及如何修复它?
答案 0 :(得分:5)
如果要打印键和值,则应使用entrySet
代替:
for (Map.Entry<String, Integer> e : map.entrySet()) {
System.out.println(e.getKey() + " = " + e.getValue());
}
至于您的投射问题,可能是因为您在导入中导入了不同的Iterator类。使用正确的导入,无需强制转换即可编译:
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
//.....
Map<String, Integer> map = new HashMap<String, Integer>();
Iterator<String> iterator = map.keySet().iterator();
答案 1 :(得分:0)
您可以通过以下方式使用enhanced loop
:
for (Entry entry : map.entrySet()) {
System.out.format("%s , %s\n", entry.getKey(), entry.getValue());
}
这样就可以遍历地图的所有条目。 在导入部分中,您应该对Entry
进行以下导入import java.util.Map.Entry;
因此完整的导入部分将如下所示:
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
如果您想查看按键并为每个按键提取相应的值,您可以采用以下方式:
import java.util.HashMap;
import java.util.Map;
// ...
for (String s : map.keySet()) {
System.out.format("%s , %s\n", s, map.get(s));
}
如果你想使用迭代器并在键上循环并根据键从地图中提取:
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
//...
Iterator<String> it = map.keySet().iterator();
while (it.hasNext()){
String currentKey = it.next();
System.out.format("%s , %s\n", currentKey), map.get(currentKey));
}
我希望这些可以帮到你。