[关闭]
@XQF 2017-02-17T11:36:26.000000Z 字数 1271 阅读 1152

关于迭代器

java


1.迭代器的使用

  1. 先使用容器的iterator()方法获取一个Iterator,然后通过Iterator的next()方法返回第一个元素
  2. 使用Iterator的hasNext()方法判断容器中是否还有元素,若有继续使用next()方法获取下一个元素
  3. 可以通过remove方法删除迭代器中的元素

2.使用示例

  1. public class Test {
  2. public static void main(String[] args) {
  3. List<String> stringList = new ArrayList<>();
  4. for (int i = 0; i < 10; i++) {
  5. stringList.add(new String("" + i));
  6. }
  7. // for (Iterator<String> iter = stringList.iterator(); iter.hasNext(); ) {
  8. // String str = iter.next();
  9. // System.out.println(str);
  10. // }
  11. Iterator<String> iterator = stringList.iterator();
  12. while (iterator.hasNext()) {
  13. System.out.println(iterator.next());
  14. }
  15. }
  16. };

3.为什么使用迭代器

参考博文

迭代模式是访问集合类的通用方法,只要集合类实现了Iterator接口,就可以用迭代的方式来访问集合类内部的数据,Iterator访问方式把对不同集合类的访问逻辑抽象出来,使得不用暴露集合内部的结构而达到循环遍历集合的效果。

例如,如果没有使用Iterator,遍历一个数组的方法是使用索引:

  1. for(int i=0; i<array.length; i++) {
  2. ... get(i) ...
  3. }

这种方法的缺点就是事先必须知道集合的数据结构,而且当我换了一种集合的话代码不可重用,要修改,比如我用set,就不能通过索引来遍历了。访问代码和集合是紧耦合,无法将访问逻辑从集合类和客户端代码中剥离出来,每一种集合类对应一种访问方式,代码不可重用。
为解决以上问题,Iterator模式总是用同一种逻辑来遍历集合。
每一种集合类返回的Iterator具体类型可能不同,Array可能返回ArrayIterator,Set可能返回SetIterator,Tree 可能返回TreeIterator,但是它们都实现了Iterator接口,因此,客户端不关心到底是哪种Iterator,它只需要获得这个 Iterator接口即可,这就是面向对象的威力。

这就是针对抽象编程的原则:对具体类的依赖性最小。

这里的集合主要是指Collection的实现类

Map到底是不是集合参考博文

4.ListIterator是什么?

单纯的Iterator是只能正向遍历的,适用于获取移除元素,而ListIterator是针对List的,是Iterator的子类,可以从两个方向来遍历List.同时支持元素的修改。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注