迭代器(Iterator)

    |     2015年5月13日   |   Java集合框架与数据结构   |     0 条评论   |    1603

任何容器类,都必须有某种方式可以将东西放进去,然后由某种方式将东西取出来。毕竟,存放事物是容器最基本的工作。对于ArrayList,add()是插入对象的方法,而get()是取出元素的方式之一。ArrayList很灵活,可以随时选取任意的元素,或使用不同的下标一次选取多个元素。 

如果从更高层的角度思考,会发现这里有一个缺点:要使用容器,必须知道其中元素的确切类型。初看起来这没有什么不好的,但是考虑如下情况:如果原本是ArrayList ,但是后来考虑到容器的特点,你想换用Set ,应该怎么做?或者你打算写通用的代码,它们只是使用容器,不知道或者说不关心容器的类型,那么如何才能不重写代码就可以应用于不同类型的容器? 
 
所以迭代器(Iterator)的概念,也是出于一种设计模式就是为达成此目的而形成的。所以Collection不提供get()方法。如果要遍历Collectin中的元素,就必须用Iterator。 

迭代器(Iterator)本身就是一个对象,它的工作就是遍历并选择集合序列中的对象,而客户端的程序员不必知道或关心该序列底层的结构。此外,迭代器通常被称为“轻量级”对象,创建它的代价小。但是,它也有一些限制,例如,某些迭代器只能单向移动。 
Collection 接口的 iterator() 方法返回一个 Iterator。Iterator 和您可能已经熟悉的 Enumeration 接口类似。使用 Iterator 接
口方法,您可以从头至尾遍历集合,并安全的从底层 Collection 中除去元素。 

下面,我们看一个对于迭代器的简单使用: 

import java.util.ArrayList; 
import java.util.Collection; 
import java.util.Iterator;   
public class IteratorDemo { 
 public static void main(String[] args) {   
    Collection collection = new ArrayList();   
    collection.add("s1");
    collection.add("s2"); 
    collection.add("s3"); 
  
    Iterator iterator = collection.iterator();//得到一个迭代器 
   while (iterator.hasNext()) {//遍历    Object element = iterator.next();    
         System.out.println("iterator = " + element); 
   } 
   if(collection.isEmpty())    
         System.out.println("collection is Empty!");   
    else   
         System.out.println("collection is not Empty! size="+collection.size()); 
 
   Iterator iterator2 = collection.iterator();  
   while (iterator2.hasNext()) {//移除元素    
       Object element = iterator2.next(); 
   System.out.println("remove: "+element);    
       iterator2.remove(); 
  }  
 
  Iterator iterator3 = collection.iterator();
   if (!iterator3.hasNext()) {//察看是否还有元素  
      System.out.println("还有元素");   
       }  

    if(collection.isEmpty()) 
         System.out.println("collection is Empty!"); 
        //使用collection.isEmpty()方法来判断  
    } 
} 

程序的运行结果为: 
iterator = s1
iterator = s2
iterator = s3
collection is not Empty! size=3
remove: s1
remove: s2
remove: s3
还有元素 
collection is Empty!

可以看到,Java的Collection的Iterator 能够用来,: 
1) 使用方法 iterator() 要求容器返回一个Iterator .第一次调用Iterator 的next() 方法时,它返回集合序列的第一个元素。
2) 使用next() 获得集合序列的中的下一个元素。 
3) 使用hasNext()检查序列中是否元素。 
4) 使用remove()将迭代器新返回的元素删除。 
需要注意的是:方法删除由next方法返回的最后一个元素,在每次调用next时,remove方法只能被调用一次 。 
大家看,Java 实现的这个迭代器的使用就是如此的简单。Iterator(跌代器)虽然功能简单,但仍然可以帮助我们解决许多问题,同时针对List 还有一个更复杂更高级的ListIterator。您可以在下面的List讲解中得到进一步的介绍。

转载请注明来源:迭代器(Iterator)
回复 取消