0

我有一个 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();
    }

我收到错误消息,例如The method hasNext() is undefined for the type ObjToIntMap.Iterator on the 2nd line and Multiple markers at this line - Map.Entry 是原始类型。对泛型类型 Map.Entry 的引用应在第 3 行参数化。

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

4

4 回答 4

4

也许你导入了错误的Iterator类?你确定你已经java.util.Iterator从另一个名为的包中导入并且没有其他类Iterator吗?

如果您导入了正确的Iterator类,您可以删除类型转换并将泛型类型添加到迭代器:

Iterator<Map.Entry<ArrayList<String>, String>> iter = mymap.entrySet().iterator()
于 2013-01-09T13:08:29.720 回答
2

您知道,一旦添加了密钥,您就无法更改它,并且它的具体类型无关紧要(或理想地使用)

final Map<List<String>,String> mymap = new TreeMap<>(comparator);
for (Map.Entry<List<String>, String> entry : mymap.entrySet()) {

}
于 2013-01-09T13:15:03.507 回答
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()

于 2013-01-09T13:14:48.507 回答
1

尝试

    Iterator<Entry<ArrayList<String>, String>> iter = mymap.entrySet().iterator();
    while(iter.hasNext()) {
        Entry<ArrayList<String>, String> entry = iter.next();
    }
于 2013-01-09T13:11:16.367 回答