如何迭代一个hashmap,是否需要在Java中强制转换keySet()?

时间:2014-02-05 14:07:59

标签: java map iterator hashmap

我有一个关于迭代一个hashmap的问题:

Map<String, Integer> map = new HashMap<String, Integer>();

我想迭代这个hashmap并使用以下代码打印出键和值对:

Iterator iterator = portMap.keySet().iterator();

但是它表明我将portMap.keySet().iterator();强制转换为(Iterator)portMap.keySet().iterator();但是iterator()已经作为迭代器返回,为什么我需要强制转换呢?我检查了一些其他代码,没有关于iterator()的返回值的强制转换,原因是什么,以及如何修复它?

2 个答案:

答案 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));
}

我希望这些可以帮到你。