黑马程序员技术交流社区
标题:
迭代器的用法,有点疑惑,求解。。。
[打印本页]
作者:
皮卫凯
时间:
2012-9-14 16:32
标题:
迭代器的用法,有点疑惑,求解。。。
本帖最后由 皮卫凯 于 2012-9-14 17:45 编辑
Iterator it = al.iterator();
while(it.hasNext())
{
System.out.println("next:"+it.next());
}
Iterator it = ts.iterator();
while(it.hasNext())
{
Student stu = (Student)it.next();
//不理解,为什么是这样的呀。好多地方都要用到这个。
System.out.println(stu.getName()+"..."+stu.getAge());
}
刚看视频,发现了迭代器的2个应用不同,没搞明白,虽然知道不同,但还是有些疑惑,没弄太明白。
谢谢大家解答,我看过泛型后,就明白了。
ArrayList<String> al = new ArrayList<String>();
al.add("abc01");
al.add("abc0991");
al.add("abc014");
Iterator<String> it = al.iterator(); //泛型
while(it.hasNext())
{
String s = it.next();
System.out.println(s+":"+s.length());
}
}
作者:
马睿
时间:
2012-9-14 16:54
迭代器取出了整个数据
然后要用next()方法一个一个取出,返回类型是一个泛型
LZ的例子里有一个强制转换,可能是迭代器取出的是student的父类(因为返回类型是泛型LZ的例子里没定义泛型E究竟是什么类型),比如说Person……那么Pensen也可以是学生吧?但是我们不能直接赋值给student所以取出后做了个转换
作者:
朱烈葵
时间:
2012-9-14 16:56
Student stu = (Student)it.next(); //不理解,为什么是这样的呀。好多地方都要用到这个。
为什么这样?原因是你存储的时候使用的是add(Object obj)这个方法,进行类型提升,而你要取出来当然是Object对象,所以你必须把它还原回来
如果你用到泛型就不会出现这样的问题。
作者:
王陶成
时间:
2012-9-14 17:11
迭代器Iterator的方法 next() 的返回类型是 E。
在迭代器的时候 ,你给它定义里面是什么对象,它就是什么对象的迭代器,这个是泛型的应用。当你没有使用泛型,迭代器Iteratro里面就有可能存放的是任何对象,可以把E看做是表示存放的任何对象。当你使用Iterator的next()的时候,它返回的就是E。而你指定接收的类型是Student,就需要将里面的类型转换为Student,就是使用强转。 Student stu = (Student)it.next();
作者:
皮卫凯
时间:
2012-9-14 17:30
朱烈葵 发表于 2012-9-14 16:56
Student stu = (Student)it.next(); //不理解,为什么是这样的呀。好多地方都要用到这个。
为什 ...
恩恩 我看看泛型去
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2