Java集合框架之迭代器(if与while语句)

来源:互联网 发布:乡村旅游数据统计 编辑:程序博客网 时间:2024/06/06 18:14

  一Iterator接口

  迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层

结构。迭代器通常被称为"轻量级"对象,因为创建它的代价小。

      Java中的迭代器(Iterator)给我们提供了一种通用的方式来访问集合中的元素。可以知道的是,它只是提供了一个

接口,并没有提供真正的Iterator类。Iterator是对collection进行迭代的迭代器。

       Iterator接口定义了如下的方法:


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

  (1)使用方法iterator()要求容器返回一个Iterator对象。第一次调用Iterator的next()方法时,它返回序列的第一个元

素。

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

  (3)使用hasNext()检查序列中是否还有元素,如果仍有元素可以迭代,则返回 true。

  (4)使用remove()将迭代器新返回的元素删除。该方法是在迭代过程中删除元素的唯一的安全方法。

       二Iterable接口

       Java中还提供了一个Iterable接口,Iterable接口实现后的功能是"返回"一个迭代器,该接口的iterator()方法返回一

个标准的Iterator实现。实现这个接口允许对象成为foreach语句的目标。就可以通过foreach语法遍历你的底层序列。

       Iterable接口包含一个能够产生Iterator的iterator()方法,并且Iterable接口被foreach用来在序列中移动。因此如果

创建了任何实现Iterable接口的类,都可以将它用于foreach语句中。

       Iterable接口中定义唯一的方法:


       所有实现了Collection接口的集合类型都有一个iterator()方法用以返回一个实现了Iterator接口的对象。Iterator对象

称作迭代器,用以方便的实现对象容器内元素的遍历操作。

      三示例

      就像上面所说的,在Java的Iterator借口中定义了三个方法:hasNext()如果仍有元素可以迭代,则返回true;next()

返回迭代的下一个元素;remove()从迭代器指向的collection 中移除迭代器返回的最后一个元素。

    我们可以认为迭代器Iterator是指向两个元素之间的位置,我们可以使用hasNext()来判断当前位置后面是否还有元

素。使用next()方法返回后面的元素,并且将位置移动到下一个元素前的位置。对于remove()方法我们删除的是当前

位置前面的元素,所以我们在调用remove()方法之前必须先调用至少一次next()方法。这里所说的迭代器的位置在被

迭代的对象中并不存在的,只是我们为了准确的说明这个方法,而假想出来的。

      我们可以使用三种循环体遍历Java集合中的元素:

      (1)使用while循环遍历

      实例:

[java] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. import java.util.*;  
  2.   
  3. public class Test{  
  4.     public static void main(String[] args){  
  5.         List list = new ArrayList();  
  6.                 list.add("aa");  
  7.                 list.add("bb");  
  8.                 list.add("cc");  
  9.           
  10.         //使用while循环遍历集合中的元素  
  11.         //使用集合的iterator()返回一个Iterator对象  
  12.         Iterator iter = list.iterator();  
  13.         //使用hasNext()方法判断是否有下一个元素  
  14.                 while(iter.hasNext()){  
  15.             //使用next()方法返回元素  
  16.             String str = (String)iter.next();  
  17.                         System.out.println(str);  
  18.                 }  
  19.     }  
  20. }  

      运行结果:


      (2)使用for循环遍历

      实例:

[java] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. import java.util.*;  
  2.   
  3. public class Test{  
  4.     public static void main(String[] args){  
  5.         List list = new ArrayList();  
  6.                 list.add("one");  
  7.                 list.add("two");  
  8.                 list.add("three");  
  9.           
  10.         //使用for循环遍历集合中的元素  
  11.         for(Iterator iter = list.iterator(); iter.hasNext();){  
  12.                       String str = (String)iter.next();  
  13.                       System.out.println(str);  
  14.                 }  
  15.     }  
  16. }  

      运行结果:


       (3)使用foreach语句遍历

       所谓的foreach语句指的是jdk 5.0新增的的一个循环结构,可以用来处理集合中的每个元素而不用考虑集合定下

标。foreach语句对于遍历array或Collection的时候相当简便。可以看到的是,我们在前面的学习的过程过程中遍历集

合中的元素对象都是使用的这种方式。

       格式如下: 

[java] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. for(variable:collection){   
  2.           statement;   
  3. }  

       实例:

[java] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. import java.util.*;  
  2.   
  3. public class Test{  
  4.     public static void main(String[] args){  
  5.         //定义的数组  
  6.         int[] arr = {1,2,3,4,5};  
  7.         for(int i : arr){  
  8.             System.out.println(i);  
  9.         }  
  10.           
  11.         System.out.println("-----------------");  
  12.         //定义的集合  
  13.         List l = new ArrayList();  
  14.         l.add(new String("aaa"));  
  15.         l.add(new String("bbb"));  
  16.         l.add(new String("ccc"));  
  17.         for(Object o : l){  
  18.             System.out.println(o);  
  19.         }  
  20.     }  
  21. }  

      运行结果:


       当然使用foreach循环结构也有缺陷:如果遍历数组会很不方便的访问到下标值:如果遍历集合那么与与使用

Iterator相比,不能方便的删除集合中的内容。除了简单遍历并读出其中的内容外,不建议使用foreach循环结构。

       在网上查询资料的时候看了好多关于Java迭代器的使用文章,看到了一篇很详细的文章,地址是Java迭代器

(转)(iterator详解以及和for循环的区别) ,写的还不错。我们学习的时候最主要的就是借助于Java API。因此经常查

API,学会使用API,我们编写程序的代码会更上一层楼。

0 0
原创粉丝点击