循环遍历HashMap的问题<string,string =“”> </string,>

时间:2014-01-10 17:10:58

标签: java hashmap

我有一个基本的HashMap。我正试图遍历它并从地图中获取密钥和值。这就是我所拥有的:

Map<String, String> myMap = versionExtractor.getVersionInfo();
for(String key : myMap.keySet())
    System.out.println(key);
    System.out.println(myMap.get(key));
}

问题是这不会编译。该行显示System.out.println(myMap.get(key));表示错误:

java: class, interface, or enum expected

IntelliJ IDE说:Cannot resolve symbol 'key'。令人困惑的是,在key的上一行中解决System.out.println(key);没有问题。怎么了?

6 个答案:

答案 0 :(得分:4)

而不是myMap[key],您应该使用myMap.get(key)。它是Map,而不是数组。顺便说一句,如果你想要密钥,你可以反复遍历EntrySet

for (Entry<String, String> entry: myMap.entrySet()) {
    System.out.println(entry.getKey());
    System.out.println(entry.getValue());
}

这可以节省额外的哈希计算,并在每次迭代时查找。


随着时间的推移,问题就出现了。 {语句后缺少for大括号,导致}的结束for循环无关紧要。无论如何,我的原始答案是关于您使用myMap[key]代替的原始问题。

答案 1 :(得分:3)

为了获得给定密钥的相应值,您应该使用get(Object key)方法:

for(String key : myMap.keySet())
    System.out.println(key);
    System.out.println(myMap.get(key));
}

更好的是,为了迭代Map,您可以使用Map的static Entry类:

for (Map.Entry<String, String> entry: map.entrySet()) {
    System.out.println(entry.getKey());
    System.out.println(entry.getValue());
}

答案 2 :(得分:2)

您将地图视为数组。这不是地图的工作方式。改为使用Map.get(key)函数。

有关详细信息,请查看tutorial,这是Google搜索“java地图”的第一个结果。

答案 3 :(得分:2)

您错过了for语句中的左大括号,因此您的第二个println不属于for循环。

答案 4 :(得分:1)

鉴于你有这个:

  

java:class,interface或enum expected

我想知道您是否正在使用JDK 1.4进行编译,并且您没有可用的Java 5增强for循环。

一旦你解决了这个问题,你不想循环遍历Map.Entry对象,以避免通过get()查找还原剂值吗?

for (Map.Entry<String,String> entry : map.entrySet()) {
   ...

答案 5 :(得分:0)

试一试:

Map.get(key)

替代查看此示例:http://www.mkyong.com/java/how-to-loop-a-map-in-java/