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
。
按此参数化您的Iterator
:Iterator<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。