我有一个基本的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);
没有问题。怎么了?
答案 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)