JAva反復器の分析について...より一般的な容器遍歴方法を設計する

2840 ワード

皆さんは私の前の反復器の設計モードの文章を見たことがありますかを知らないで、ここで私はみんなが反復器の設計モードの原理を理解すると仮定して...前の1篇を見に行くことが分かりません
実はjavaの中で反復器の設計に対してただこのようなモードにほかならない...私達は容器を遍歴する時
例えばArrayListはgetとadd...addをCollectonから実装する方法であり...getはArrayListが単独で追加したものであり、汎用インタフェースではない.
HashSetにはgetは存在しません...
対象思想の目的の一つがコード再利用である以上,これらの容器類を統一的に処理することができるだろうか.
Iterator反復インタフェースには、Iteratorインタフェースを実装したクラスごとに、反復機能を提供する3つの方法があります. boolean hasNext()           反復可能な要素がまだある場合はtrueを返します. E next()           反復の次の要素を返します. void remove()           反復器が指すcollectionから反復器が返す最後の要素を除去します(オプション).
Collectionインタフェースを実装するクラスごとにiteratorメソッドがIterator反復器オブジェクトを返すことができます.もちろん、ここではIteratorの実装クラスのオブジェクトです.
ただ私たちは上へ転換しただけで、彼はIteratorと見なしています.の戻ってきたのはIteratorだ  具体的な実現原理は私の前の反復器設計モードの実現を見てください.次に、反復器を用いて容器の統一操作を実現する.
 
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
public class MyIterator {  
	public static void showContainer(Iterator<String> it) {  
		while(it.hasNext()){ 
			System.out.println(it.next());
			it.remove() ;
		}
		
	}
	public static void main(String []agrs)
	{
		  Collection<String> c=new ArrayList<String>();
		  Collection<String> s=new HashSet<String>();
		  c.addAll(new ArrayList<String>(){
				private static final long serialVersionUID = 1L;
				{
					  add("one")  ;
					  add("two")  ;
					  add("three")  ;
					  add("four")  ;
				  }
			  }) ;
		  
		  s.addAll(new HashSet<String>(){
				private static final long serialVersionUID = 1L;
				{     
					  add("four")  ;
					  add("one")  ;
					  add("two")  ;
					  add("three")  ;
					  add("four")  ;
				  }
			  });
		 System.out.println("------------------");
		  MyIterator.showContainer(c.iterator() ) ;
		  System.out.println(c.size());
		  System.out.println("-----------------");
		  MyIterator.showContainer(s.iterator()) ;
		  System.out.println(s.size());
		  
	}

}