Java中设计与使用迭代器

1.迭代器设计

迭代器是一种模式,它可以使得对于序列类型的数据结构的遍 历行为与被遍历的对象分离,即我们无需关心该序列的底层结构是 什么样子的。

一般的迭代器对外提供的接口有:

[1]检查是否至序列末端;

[2]返回当前的对象;

[3]过渡到下一个对象。

我们基于以上三点,提供一个迭代器Interface。

<>MyIteraTor.java

package com.zj.iteraTor;public interface MyIteraTor {   boolean end();   T current();   void next();}

接下来,设计一个序列,并部署上面设计的迭代器。我们使用 一个ArrayList作为底层的数据结构,设计一个内部类 LinksIteraTor来实现MyIteraTor接口,这样可以提供迭代器功能 。通过public MyIteraTor browser()方法返回该迭代器 的实例。

Links.java

package com.zj.iteraTor;import java.util.ArrayList;import java.util.List;public class Links {   private List items = new ArrayList();   public void add(T x) {    items.add(x);   }   private class LinksIteraTor implements MyIteraTor {    private int i = 0;    public boolean end() {      return i == items.size();    }    public T current() {      return items.get(i);    }    public void next() {      if (i < items.size())        i++;    }   }   public MyIteraTor browser() {    return new LinksIteraTor();   }   public static void main(String[] args) {    Links links = new Links();    for (int i = 1; i < 6; i++)      links.add(i);    // use MyIteraTor    MyIteraTor myItr = links.browser ();    while (!myItr.end()) {      System.out.print(myItr.current() + " ");      myItr.next();    }   }}

在Link2.java中,我们使用一个匿名内部类替代Links.java中内部类的设计。

Links2.java

package com.zj.iteraTor;import java.util.ArrayList;import java.util.List;public class Links2 {   private List items = new ArrayList();   public void add(T x) {    items.add(x);   }   public MyIteraTor browser() {    return new MyIteraTor() {      private int i = 0;      public boolean end() {        return i == items.size();      }      public T current() {        return items.get(i);      }      public void next() {        if (i < items.size())          i++;      }    };   }   public static void main(String[] args) {    Links2 links = new Links2();    for (int i = 1; i < 6; i++)      links.add(i);    // use MyIteraTor    MyIteraTor myItr = links.browser ();    while (!myItr.end()) {      System.out.print(myItr.current() + " ");      myItr.next();    }   }}

2.使用Java提供的迭代器

Java提供一个专门的迭代器 <>IteraTor,我们可以对某个序列实现 该interface,来提供标准的Java迭代器。

<>IteraTor.java

package java.util;public interface IteraTor {   boolean hasNext();   E next();   void remove();}

我们在Links2.java的基础上,重新设计并使用实现标准的 IteraTor接口方法。

Links3.java

package com.zj.iteraTor.standard;import java.util.ArrayList;import java.util.IteraTor;import java.util.List;public class Links3 {   private List items = new ArrayList();   public void add(T x) {    items.add(x);   }   public IteraTor iteraTor() {    return new IteraTor() {      private int index = 0;      public boolean hasNext() {        return index < items.size();      }      public T next() {        return items.get(index++); 去了不同的地方,看了不同的风景,知道了不同的事,

Java中设计与使用迭代器

相关文章:

你感兴趣的文章:

标签云: