Java中的迭代器用用法

来源:互联网 发布:如何把淘宝店开好 编辑:程序博客网 时间:2024/05/21 16:58

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

  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.    }  

对于这两种方式,我们总是都事先知道集合的内部结构,访问代码和集合本身是紧密耦合的,无法将访问逻辑从集合类和客户端代码中分离出来。同时每一种集合对应一种遍历方法,客户端代码无法复用。在实际应用中如何需要将上面将两个集合进行整合是相当麻烦的。所以为了解决以上问题,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. }  

原创粉丝点击