我有一个TreeMap定义如下:
final TreeMap<ArrayList<String>,String> mymap = new TreeMap<ArrayList<String>,String>(comparator);
当我尝试像这样迭代时:
Iterator iter = (Iterator) mymap.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
}
我收到错误消息,如第二行的类型ObjToIntMap.Iterator 的方法hasNext()未定义,此行的多个标记 - Map.Entry是原始类型。引用泛型类型Map.Entry应该是 参数化在第3行。
此错误的来源是什么,我该如何解决?
答案 0 :(得分:4)
也许您导入了错误的Iterator
课程?您确定已从其他名为java.util.Iterator
的软件包中导入Iterator
而没有其他类吗?
如果导入了正确的Iterator
类,则可以删除类型转换并将泛型类型添加到迭代器中:
Iterator<Map.Entry<ArrayList<String>, String>> iter = mymap.entrySet().iterator()
答案 1 :(得分:2)
您知道一旦添加了密钥就无法更改密钥,并且具体类型无关紧要(或理想情况下使用)
final Map<List<String>,String> mymap = new TreeMap<>(comparator);
for (Map.Entry<List<String>, String> entry : mymap.entrySet()) {
}
答案 2 :(得分:1)
尝试
Iterator<Entry<ArrayList<String>, String>> iter = mymap.entrySet().iterator();
while(iter.hasNext()) {
Entry<ArrayList<String>, String> entry = iter.next();
}
答案 3 :(得分:1)
您可以使用for-each循环遍历地图:
for(Map.Entry<List<String>,String> entry : mymap.entrySet()) {
List<String> key = entry.getKey();
String value = entry.getValue();
// Do something useful with the key and value
}
或者您可以使用mymap.keySet()
或值mymap.calues()
循环键。