文章出處

迭代器模式提供一種方法順序訪問一個聚合對象中的各種元素,而又不暴露該對象的內部表示。提供一種方法順序訪問一個聚合對象中的各種元素,而又不暴露該對象的內部表示。訪問一個聚合對象的內容而無需暴露它的內部表示
支持對聚合對象的多種遍歷,為遍歷不同的聚合結構提供一個統一的接口。

迭代器模式可以直接使用原生JDK中提供的方法:java.util.Iterator;,如:

import java.util.ArrayList;import java.util.Iterator;/** * 原生的迭代器用法 */public class UtilIteratorTest {public static void main(String[] args) {// TODO 自動生成的方法存根ArrayList<string> array = new ArrayList<string>();array.add("a");array.add("b");array.add("c");array.add("d");Iterator<string> it = array.iterator();while(it.hasNext()){System.out.println(it.next());}}}

也可自定義MyIterator實現:

Iterator:自定義迭代器接口

public interface Iterator {// 前移public Object previous();// 后移public Object next();// 是否還有下個元素public boolean hasNext();// 取得第一個元素public Object first();}

Collection:定義一個用來處理集合接口

public interface Collection {public Iterator iterator();/* 取得集合元素 */public Object get(int i);/* 取得集合大小 */public int size();}

MyIterator:實現迭代器接口

public class MyIterator implements Iterator {        private Collection collection;        private int pos = -1;        public MyIterator(Collection collection){            this.collection = collection;        }                @Override        public Object previous() {            if(pos > 0){                pos--;            }            return collection.get(pos);        }            @Override        public Object next() {            if(pos<collection.size()-1){                pos++;            }            return collection.get(pos);        }            @Override        public boolean hasNext() {            if(pos<collection.size()-1){                return true;            }else{                return false;            }        }            @Override        public Object first() {            pos = 0;            return collection.get(pos);        }        }

MyCollection:實現該集合接口

public class MyCollection implements Collection {        public String[] string = {};              public MyCollection(String[] array){          string = array;      }            @Override        public Iterator iterator() {            return new MyIterator(this);        }            @Override        public Object get(int i) {            return string[i];        }            @Override        public int size() {            return string.length;        }    }

執行過程:

String[] array = { "A", "B", "C", "D", "E" };  Collection collection = new MyCollection(array);  Iterator it = collection.iterator();    while (it.hasNext()) {      System.out.println(it.next());  } 

執行結果:

A  B  C  D  E 

看文倉www.92to.com網友整理上傳,為您提供最全的知識大全,期待您的分享,轉載請注明出處。
歡迎轉載:http://www.kanwencang.com/bangong/20161231/80344.html

文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()