Set set = hm.entrySet();
Iterator i = set.iterator();
while (i.hasNext()) {
Map.Entry me = (Map.Entry)i.next();
// me.getValue should point to an arraylist
Iterator<Student> it = (me.getValue()).iterator();
while (it.hasNext()) {
// some code
}
}
好的,我尝试迭代Arraylist并且由于某种原因它不起作用,编译器告诉我它找不到符号。我知道me.getValue()应该指向一个对象,在这种情况下,键/值对的值部分是一个Arraylist。那么,怎么了?
答案 0 :(得分:3)
当你这样做时
Map.Entry me = (Map.Entry)i.next();
你正在创建一个无类型的Map.Entry实例,就像在做
Map.Entry<Object, Object> me = ...
然后,当你尝试
时Iterator<Student> it = (me.getValue()).iterator();
这相当于尝试
ArrayList<Object> objects;
Strudent s = objects.get(0);
显然,你不能这样做。相反,您需要使用适当的类型实例化Map.Entry对象:
Map.Entry<YourKeyType, ArrayList<Student>> me =
(Map.Entry<YourKeyType, ArrayList<Student>>) i.next();
请注意,您可以避免在那里进行强制转换,并充分利用generic type safety,使迭代器成为Iterator<YourKeyType, ArrayList<Student>>
,而不是将其声明为原始类型。