迭代器模式:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。
聚合对象可以是数组,也可以是集合等。
遍历集合,我们可以使用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 @Override 14 public boolean hasNext() { 15 if(position >= arr.length || arr[position] == null) 16 { 17 return false; 18 } 19 return true; 20 } 21 22 @Override 23 public Integer next() { 24 Integer ele = arr[position]; 25 position++; 26 return ele; 27 } 28 29 @Override 30 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 }