迭代器接口和方法


ArrayList<Student> al = new ArrayList<Student>();
Iterator itr = al.iterator(); 
while (itr.hasNext())
{  
Student st = (Student) itr.next();
System.out.println(st.rollno+" "+st.name+""+st.age);                                                  
}

假设学生班级有三个数据成员卷号,姓名和年龄。 所以,我的问题是为什么我们在语句中向下抛弃 Student st=(Student)itr.next(); 但是,如果我们制作一个将字符串作为数据成员类型的 ArrayList,那么就没有必要再次使用迭代器将其向下转换。 请帮助消除我的疑虑。

那是因为您使用的是原始Iterator

按此参数化您的IteratorIterator<Student> itr=al.iterator();

然后,您不必将next调用(原始时返回Object)显式转换为Student

如果您只是迭代和打印,也可以避免混乱,并改用快速枚举:

for (Student s: al) {
// print stuff
}

Iterator可以利用泛型,因此您可以拥有一个在调用next()时返回Student实例的Iterator<Student>

实际上al.iterator()已经返回了一个Iterator<Student>,您只是通过将其分配给原始Iterator来擦除其泛型。

看看这个相关的问题:Java中的Iterator vs Iterator。

最新更新