迭代arraylist的hashmap

时间:2014-09-23 01:51:19

标签: java

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。那么,怎么了?

1 个答案:

答案 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>>,而不是将其声明为原始类型。