Iterator在Java中返回TreeMap的错误

时间:2013-01-09 13:05:35

标签: java map iterator treemap sortedmap

我有一个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行。

此错误的来源是什么,我该如何解决?

4 个答案:

答案 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()循环键。