黑马程序员技术交流社区
标题:
关于Iterator的一个问题
[打印本页]
作者:
decadence90
时间:
2015-7-22 21:47
标题:
关于Iterator的一个问题
//Student是复写过toString方法的
public class IteratorDemo {
public static void main(String[] args) {
Collection c = new ArrayList();
c.add(new Student("小王", 10));
c.add(new Student("小李", 12));
c.add(15);
for (Iterator it = c.iterator(); it.hasNext();) {
Object o = it.next(); // 在这里并没强转为Student型
System.out.println(o); //但是输出的确实是Student的toString()的方法
}
}
}
解释:
it.next()的返回值就是添加时的对象,因为一个集合可以添加不同
类型的引用类型,所以,在这里it.next()不能确定到底返回的是哪一个对象
所以只能用Object来接收.直接打印的时候就是调用的是存入该对象的toString()方法.
作者:
官沛
时间:
2015-7-22 21:57
嗯,是这样的,我今天也纠结了好一会儿
作者:
扶摇丶
时间:
2015-7-22 22:02
当时就有点难以理解
作者:
T-l-H、小生
时间:
2015-7-22 22:08
你这个不就是个使用ArrayList集合存储自定义对象,并且使用迭代器遍历集合中的对象嘛?搞那么复杂干嘛?还要重写toString()方法?
直接
Iterator it=c.Iterator();
while(it.hasNext){
Student stu=(Student)it.next();
s.o.p(stu.getName+stu.getAge);
}
又或者直接在ArrayList后面加个<Student>类,在迭代器后面也直接加个<Student>,搞个泛型集合,依然使用it.next()拿到集合中的元素之后,连强转都不用,直接用Student接收了。
还有剩下普通for循环和增强版for循环遍历的方法就不说了。。。
作者:
decadence90
时间:
2015-7-22 22:17
T-l-H、小生 发表于 2015-7-22 22:08
你这个不就是个使用ArrayList集合存储自定义对象,并且使用迭代器遍历集合中的对象嘛?搞那么复杂干嘛?还 ...
这个我知道啊 , 我讲的不是这个 , 是没有强转,打印值却是调用的 Student 的toString()方法
作者:
呆呆怪兽
时间:
2015-7-22 22:19
那你这里是不是可以理解为Iterator会隐式判断集合里的对象类型?
作者:
decadence90
时间:
2015-7-23 07:56
在用Objece接收的那一句不会自动判断,当在输出的那一句才确定了是什么类型.
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2