容器类:迭代器Iterator与ListIterator(三)

IteratorListIterator

迭代器模式给容器的应用带来以下好处

  • 支持以不同的方式遍历一个容器角色。根据实现方式的不同,效果上会有差别。
  • 简化了容器的接口。但是在java Collection中为了提高可扩展性,容器还是提供了遍历的接口。
  • 对同一个容器对象,可以同时进行多个遍历。因为遍历状态是保存在每一个迭代器对象中的。

迭代器模式的适用范围

  • 访问一个容器对象的内容而无需暴露它的内部表示。
  • 支持对容器对象的多种遍历。
  • 为遍历不同的容器结构提供一个统一的接口(多态迭代)。

Iterator的最大威力:能够将遍历序列的操作与序列底层的结构分离。迭代器统一了对容器的访问方式。

Collection实现了Iterator接口,所以我们可以用Iterator来遍历多种集合类型。

Iterator接口中有三个方法:
1.hasNext():返回布尔值,查看是否有元素可以遍历
2.next():返回迭代的下一个元素
3.remove():删除用next()返回的最后一个元素,不能连续调用remove方法。只能next一次再remove一次。

使用了这三个方法的Demo:

 

 1 import java.util.ArrayList;
 2 import java.util.Arrays;
 3 import java.util.Iterator;
 4 import java.util.List;
 5 
 6 public class IteratorTest {
 7     public static void main(String[] args) {
 8         List<SuperClass> list = new ArrayList(Arrays.asList(new SuperClass(), new Class01(), 
 9 
10 new Class02()));
11         Iterator<SuperClass> it = list.iterator();
12         while(it.hasNext()){
13             SuperClass s = it.next();
14             System.out.println(s);
15             System.out.println("删除该元素");
16             it.remove();
17             
18         }
19         System.out.println("\n"+list);
20     }
21 }
22 
23 class SuperClass{};
24 class Class01 extends SuperClass{}
25 class Class02 extends SuperClass{}

 

 

ListIterator
ListIterator是Iterator的子类接口,只能用于各种List类的访问。Iterator只能单向向前移动,但是ListIterator可以双向移动。

逆向访问
逆向访问用到的两个方法:hasPrevious()、previous()。
注:逆向访问时,初始化ListIterator实例时,要提供一个list.size()参数,这样才能总尾部开始迭代。

逆向访问的Demo:

 

1 List<String> list=new ArrayList<String>();  
2         list.add("first");  
3         list.add("second");  
4         list.add("third");  
5         ListIterator it=list.listIterator (list.size());  
6         while(it.hasPrevious()){  
7             System.out.println(it.previous());  
8              }

 

 

 

posted on 2012-09-18 00:31  <安之若素>  阅读(2530)  评论(0编辑  收藏  举报

导航