A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 皮卫凯 中级黑马   /  2012-9-14 16:32  /  2113 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 皮卫凯 于 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());
  }
}



评分

参与人数 1技术分 +1 收起 理由
王德升 + 1 赞一个!

查看全部评分

4 个回复

正序浏览
朱烈葵 发表于 2012-9-14 16:56
Student stu = (Student)it.next();            //不理解,为什么是这样的呀。好多地方都要用到这个。
为什 ...

恩恩 我看看泛型去
回复 使用道具 举报
迭代器Iterator的方法 next() 的返回类型是 E。
在迭代器的时候 ,你给它定义里面是什么对象,它就是什么对象的迭代器,这个是泛型的应用。当你没有使用泛型,迭代器Iteratro里面就有可能存放的是任何对象,可以把E看做是表示存放的任何对象。当你使用Iterator的next()的时候,它返回的就是E。而你指定接收的类型是Student,就需要将里面的类型转换为Student,就是使用强转。   Student stu = (Student)it.next();
回复 使用道具 举报
Student stu = (Student)it.next();            //不理解,为什么是这样的呀。好多地方都要用到这个。
为什么这样?原因是你存储的时候使用的是add(Object obj)这个方法,进行类型提升,而你要取出来当然是Object对象,所以你必须把它还原回来
如果你用到泛型就不会出现这样的问题。
回复 使用道具 举报
迭代器取出了整个数据
然后要用next()方法一个一个取出,返回类型是一个泛型

LZ的例子里有一个强制转换,可能是迭代器取出的是student的父类(因为返回类型是泛型LZ的例子里没定义泛型E究竟是什么类型),比如说Person……那么Pensen也可以是学生吧?但是我们不能直接赋值给student所以取出后做了个转换
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马