首页 > 代码库 > 迭代器模式

迭代器模式

迭代器模式:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。

聚合对象可以是数组,也可以是集合等。

遍历集合,我们可以使用for循环,foreach循环。遍历数组,可以使用for循环,foreach循环。

但是使用上面这两种形式,我们都需要知道聚合对象是数组,还是集合。

但是使用了迭代器之后,我们只要拿到了聚合对象的迭代器之后,就可以遍历元素了,不需要知道聚合对象是集合还是数组。

一般,集合对象可以调用iterator()方法获得自己的迭代器对象,而数组不支持iterator()方法。但是我们可以创建一个迭代器对象 。

 1 /** 2  * Integer[]数组 迭代器类   通过构造器传入要迭代的数组对象 3  * @author wly 4  * 5  */ 6 public class ArrayIterator implements Iterator<Integer> { 7     Integer[] arr; 8     int position = 0; 9     public ArrayIterator(Integer[] arr)10     {11        this.arr = arr;    12     }13     @Override14     public boolean hasNext() {15         if(position >= arr.length || arr[position] == null)16         {17             return false;18         }19         return true;20     }21 22     @Override23     public Integer next() {24         Integer  ele = arr[position];25         position++;26         return ele;27     }28 29     @Override30     public void remove() {31         throw new UnsupportedOperationException("这个数组迭代器不支持删除元素!");    32     }33 34 }

提供一个测试类:

 1 public class TestClass { 2  3     public static void main(String[] args) { 4         Integer[] a = new Integer[]{1,2,3}; 5         //将数组传入迭代器的构造器中  ,从而让迭代器拿到要迭代的数组对象 6         Iterator iterator = new ArrayIterator(a); 7         while(iterator.hasNext()) 8         { 9             Integer num = (Integer)iterator.next();10             System.out.println(num);11             12         }13     }14 }

 

迭代器模式