黑马程序员技术交流社区

标题: 关于ArrayList的遍历 [打印本页]

作者: 官仁杰    时间: 2012-9-28 17:18
标题: 关于ArrayList的遍历
本帖最后由 官仁杰 于 2012-9-28 22:40 编辑

视频里一般都是用迭代器遍历的
  1. ArrayList a = new ArrayList();
  2. Iterator it = a.iterator();
  3. while (it.hasNext()){
  4.         Object tmp = it.next();
  5. }
复制代码
如果像数组那样遍历,和用迭代器有什么区别吗(迭代器有什么优势?)
  1. for(int i = 0; i < a.size(); i++){
  2.         tmp = a.get(i);
  3. }
复制代码
这样遍历还能操作角标
作者: 杨卫腾    时间: 2012-9-28 17:25
迭代器是属于集合内部的方法,具有通用性。

而for循环只是对于底层是数组的集合进行操作,
其他集合是完全不能操作的,而且角标也是获
取不到的。



作者: 王玉岩    时间: 2012-9-28 17:27
ArrayList a = new ArrayList();
Iterator it = a.iterator();
while (it.hasNext()){
        Object tmp = it.next();
}

// 对于ArrayList来说,Iterator的效率要比用for循环的低,//但是它有个好处是你可以在中间随意的删除it.remove()
//而不像用for循环那样需要自己要考虑索引的变化 我想这应该是这一点
for(int i = 0; i < a.size(); i++){
        tmp = a.get(i);
}



作者: 覃宏海    时间: 2012-9-28 17:27
for循环和高级for是不同的!用for循环不能完成迭代器的功能!
只能用迭代和高级for进行比较!
高级for是1.5出现的,它的优势就是方便了书写,再也不用写麻烦的迭代了,当然它也有它的缺点,高级for只能遍历数组,不能进行一些增删的操作,而对迭代来说,在一些情况下,可以进行更进一步的操作!
作者: 李建强    时间: 2012-9-28 18:10
本帖最后由 李建强 于 2012-9-28 18:22 编辑

使用get,
虽然效率上可能比Iterator快那么一点点,
但是缺点太多:
暴露了内部结构,
代码和集合耦合性太强,
无法复用,过一段时间List想换成Set就挂了。
而Iterator则对所有的集合采用同一种方式遍历,只要你实现Collection接口。
  1. Iteator iter = list.iterator();
  2. while (iter.hasNext()){
  3. iter.next();
  4. }
  5. //转变成Set接口只要修改一处代码即可

  6. Iteator iter = set.iterator();
  7. while (iter.hasNext()){
  8. iter.next();
  9. }

复制代码
Iterator,只要998,不要再犹豫了    马上拿起电话订购吧!!

作者: 柳彬    时间: 2012-9-28 18:12
public interface Iterator<E>对 collection 进行迭代的迭代器。迭代器取代了 Java Collections Framework 中的 Enumeration。迭代器与枚举有两点不同:

迭代器允许调用者利用定义良好的语义在迭代期间从迭代器所指向的 collection 移除元素。
方法名称得到了改进。
方法摘要
boolean hasNext()
          如果仍有元素可以迭代,则返回 true。
E next()
          返回迭代的下一个元素。
void remove()
          从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。

此接口是 Java Collections Framework 的成员
这当然有区别for语句是底层操作,他复杂了对数组的操作,而迭代器则把对集合的操作都封装在里面,方便了开发人员编码,而且迭代器有remove功能,他的功能更强,他的设计很符合面向对象的思想
作者: 官仁杰    时间: 2012-9-28 22:39
感谢诸位的回答




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2