黑马程序员技术交流社区

标题: 迭代器的用法,有点疑惑,求解。。。 [打印本页]

作者: 皮卫凯    时间: 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