黑马程序员技术交流社区

标题: 关于集合迭代器的一点疑问 [打印本页]

作者: 杨翔    时间: 2013-3-27 00:04
标题: 关于集合迭代器的一点疑问
关于迭代器我的理解是  假如说有一个 集合 al 其中的元素有如下四个: java1, java2, java3, java4  如果要它们都取出的话就要像下面的代码那样用 Iterator 这个接口
  Iterator it = al.Iterator();  建立一个Iterator类型的引用it然后指向等号右边建立的对象,然后使用 对象内部的方法将集合的元素一个个取出来,在这个过程中,视频课程里面
提到了 内部类,基本上说的我也能听明白,但是自己又想了想感觉糊涂了。 我看到了内部类 实现了 Iterator接口然后 返回了一个对象,这个对象能够使用取出集合元素的方法,
但是为什么非要建立一个 Iterator类型的引用才能调用这个对象 的方法呢?其中具体是什么原理呢?
作者: 罗胜华    时间: 2013-3-27 00:49
Iterator是一个接口,只要实现了这个接口的集合就能得到这个集合的迭代器

像你上面说的举例:
List<String> list = new ArrayList();
list.add("java1");
list.add("java2");
list.add("java3");
list.add("java4");
//因为arrayList实现了iterator接口,所以list就实现了iterator接口中的所有方法,从而可以迭代集合中的元素
Iterator iter = list.iterator();
while(iter.hasNext()){
   String s = iter.next();
  System.out.println(s);
}
还有你说的返回一个对象 应该就是指迭代器!!希望能帮到你

作者: 陈丽莉    时间: 2013-3-27 11:38
若还有问题,请继续追问;没有的话,尽量及时将帖子分类改成【已解决】哦~
作者: 何衍其    时间: 2013-3-30 19:20
本帖最后由 何衍其 于 2013-3-30 21:06 编辑

我想有两方面的原因
1,封装:因为集合中实现Iterator接口,就赋于了Iterator现实类访问集合的实例成员。通过返回内类现实的Iterator既可以隐藏对集合的访问也可以隐藏Iterator的实现
2,foreach语法的需要,因为Collection实现了可迭代接口Iterable,因而使用内部类实现Iterator是很自然的方式

foreach语法,即 for (元素:集合/数组),只要实现了Iterabler接口,就可以使用foreach语法




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