迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。

  Java中的Iterator功能比较简单,并且只能单向移动:

  (1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。

  (2) 使用next()获得序列中的下一个元素。

  (3) 使用hasNext()检查序列中是否还有元素。

  (4) 使用remove()将迭代器新返回的元素删除。

  Iterator是Java迭代器最简单的实现,为List设计的ListIterator具有更多的功能,它可以从两个方向遍历List,也可以从List中插入和删除元素。

    1. Iterator iterator = list.iterator();  
    2. while(iterator.hasNext()){  
    3.             String string = iterator.next();  
    4. //do something  
    5.         }

     

    迭代其实我们可以简单地理解为遍历,是一个标准化遍历各类容器里面的所有对象的方法类,它是一个很典型的设计模式。Iterator模式是用于遍历集合类的标准访问方法。它可以把访问逻辑从不同类型的集合类中抽象出来,从而避免向客户端暴露集合的内部结构。在没有迭代器时我们都是这么进行处理的。如下:

            对于数组我们是使用下标来进行处理的:



    [java]  
       view plain 
        copy 
       
     
       
     
     
    1. int[] arrays = new int[10];  
    2. for(int i = 0 ; i < arrays.length ; i++){  
    3. int a = arrays[i];  
    4. //do something  
    5.    }

            对于ArrayList是这么处理的:


    [java]  
       view plain 
        copy 
       
     
       
     
     
    1. List<String> list = new ArrayList<String>();  
    2. for(int i = 0 ; i < list.size() ;  i++){  
    3.       String string = list.get(i);  
    4. //do something  
    5.    }  
    6.

    对于这两种方式,我们总是都事先知道集合的内部结构,访问代码和集合本身是紧密耦合的,无法将访问逻辑从集合类和客户端代码中分离出来。同时每一种集合对应一种遍历方法,客户端代码无法复用。在实际应用中如何需要将上面将两个集合进行整合是相当麻烦的。所以为了解决以上问题,Iterator模式腾空出世,它总是用同一种逻辑来遍历集合。使得客户端自身不需要来维护集合的内部结构,所有的内部状态都由Iterator来维护。客户端从不直接和集合类打交道,它总是控制Iterator,向它发送"向前","向后","取当前元素"的命令,就可以间接遍历整个集合。


    对于我们而言,我们只一般只需使用next()、hasNext()两个方法即可完成迭代。如下:

    [java]  
      view plain 
       copy 
      
     
      
     
    1. for(Iterator it = c.iterator(); it.hasNext(); ) {  
    2.   Object o = it.next();  
    3. //do something  
    4. }