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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Gump 中级黑马   /  2013-12-13 11:20  /  955 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. public static void method_iterator()
  2.         {
  3.                 ArrayList al = new ArrayList();
  4.                
  5.                 al.add("java01");
  6.                 al.add("java02");
  7.                 al.add("java03");
  8.                 al.add("java04");
  9.                
  10.                 Iterator it = al.iterator();
  11.                 while (it.hasNext())
  12.                 {
  13.                         Object obj = it.next();
  14.                         if (obj.equals("java02"))
  15.                         {
  16.                                 it.remove();
  17.                                 sop("Obj="+obj);

  18.                         }
  19.                 }
  20.                 sop(al);
复制代码

可能是前面基础不太好,有点不太理解 Object obj = it.next();  这里我知道有多态,可能也涉及到内部类等,但是我想得到大神们一些精辟的更全面的讲解,顺便再请教一下 it.remove(); 这里为什么不用obj.remove(); 谢谢大家

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

5 个回复

正序浏览
依然 发表于 2013-12-13 11:42
Object obj = it.next();本来it.next()这里要用的泛型,在你听接下来的视频中会学习到,这里就讲这个意思是 ...

感谢!!
回复 使用道具 举报
風諾 发表于 2013-12-13 14:23
楼主可能对多态和迭代是怎么回事还不是完全明白,我说一下我的看法

之所以用 Object obj = it.next();可能 ...

感谢详细解答!
回复 使用道具 举报
本帖最后由 風諾 于 2013-12-13 14:30 编辑

楼主可能对多态和迭代是怎么回事还不是完全明白,我说一下我的看法

之所以用 Object obj = it.next();可能是出于这样的考虑:
你对集合添加的都是String类型的元素,但是不要忘记了,集合可以装不同类型的元素。当你添加多个不同类型元素的时候(比如既有int又有String),你这里只能用Object obj = it.next();因为迭代的时候每次出来的元素类型都可能不同,你固定一个类是不能通用的。而根据多态使用Object类对象接收就没有这个问题。

之所以是it.remove();而不是obj.remove();原因在于:
Object obj = it.next();该语句体现了多态的性质,左侧是父类引用,右侧是子类实体对象。对于这样的情况,并且调用非静态方法。编译时,编译器检查语法,会找父类是否有该方法。很明显Object类没有remove()方法,编译会出问题(这也是多态的访问局限性)。而Iterator接口中的remove()方法是删除迭代器返回的最后一个元素(通过next()返回元素),你上面调用了next(),返回了一个元素。it.remove()操作就是删掉这个元素


评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报 1 0
对于你说的“这里为什么不用obj.remove()”,obj是一个object的对象,它不能将自己删除,我们只能通过我们的迭代器(Iterator)来操作这个集合
回复 使用道具 举报
Object obj = it.next();本来it.next()这里要用的泛型,在你听接下来的视频中会学习到,这里就讲这个意思是把it.next()转换为Object类型,Object是所有类的父类。
Itreator 中不能使用remove方法,要使用ListItreator才可以再迭代的时候使用remove方法
  1. ListIterator it = al.listIterator();
复制代码

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马