2013-01-09 151 views
0
为TreeMap的返回错误

我有一个TreeMap的定义如下:迭代器中的Java

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(); 
    } 

我收到错误消息像的方法hasNext()对于第二行的类型ObjToIntMap.Iterator未定义,该行的多个标记 - Map.Entry是原始类型。泛型类型Map.Entry的引用应为 参数化第3行的

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

+0

你不觉得TreeMap的<字符串,ArrayList的>会更好?字符串是一个键 – Deepak

+1

1.我不能用你已发布的代码重现错误2.在各处使用泛型是一个好习惯:'Iterator ,String >> iter = mymap.entrySet( ).iterator();'3.做2可能会帮助你理解错误是什么。 – assylias

+0

@Deepak,是啊我知道它看起来很奇怪,但我需要做到这一点有一个自定义比较函数.. – SexyBeast

回答

4

也许你输入了错误的Iterator类?您确定您已经导入了java.util.Iterator,并且没有其他名称为Iterator的其他程序包中的其他课程吗?

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

Iterator<Map.Entry<ArrayList<String>, String>> iter = mymap.entrySet().iterator() 
+0

是啊,不知道从另一个'iterator'类导入!万分感谢! – SexyBeast

+0

另一个问题,当我想通过'entry.getKey()。get(0)'访问关键数组列表中的第一个元素时,我得到错误消息**方法get(int)未定义为类型Object **。我如何解决它? – SexyBeast

+0

解决了它,解决了它。现在好了... – SexyBeast

1

尝试

Iterator<Entry<ArrayList<String>, String>> iter = mymap.entrySet().iterator(); 
    while(iter.hasNext()) { 
     Entry<ArrayList<String>, String> entry = iter.next(); 
    } 
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()

2

你知道,你不能改变的关键,一旦加入,它的具体类型并不重要(或理想地使用)

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

}