Java IterableとItertorの詳細

2960 ワード

IterableとIteratorは時間をかけて研究して整理することにしました
英語の意味からIterableを理解する:だから不思議で、このインタフェースを実現した集合オブジェクトは反復をサポートし、反復可能である.ableの終わりの表現は...のように、することができます....Iterator:英語でorエンディングは...を表す人or...者です.クリエイターはクリエイターの意味です.ここでも同じです.iteratorは反復者です.私たちは一般的に反復器と呼ばれています.それは反復メカニズムを提供するオブジェクトです.具体的にどのように反復するかは、Iteratorインタフェース仕様です.
Iterableコレクションオブジェクトは、反復をサポートしていることを示し、foreach文を使用できる特権を持つには、Iterableインタフェースを実装し、私が反復可能であることを示しなければなりません.しかし、Iterableインタフェースを実装するには、foreach文に反復器を提供する必要があります.この反復器はインタフェースで定義されたiteratorメソッドで提供されます.つまりiteratorメソッドはIteratorオブジェクトを返す必要があります.
//Iterable JDK  
//         ,     ,          Iterator

public interface Iterable
{
  
    Iterator iterator();
}

IteratorにはhasNext,next,removeの3つのメソッドが含まれています.removeは需要に応じて実現され、一般的にはあまり使われず、Eclipseインタフェースメソッドが自動的に補完されると、remove再生メソッドは無視されます.1、反復する前にhasNext()を呼び出して、終点まで反復するかどうかを検出します(今回は反復できますか?)2、nextメソッドは現在の要素だけでなく、カーソルcursor 3、remove()メソッドを後方に移動して、前回反復した要素4を削除し、反復した要素は元のセットの要素のコピー(重要)5、foreachと協力して使用する
//Iterator   JDK  ,         Iterator     

public interface Iterator {
   

    boolean hasNext();    //  next  ,               

    E next();            //         ,  ,      
              

     /*                  。
        next    ,    remove  。
                ,       remove()      next  ( );
           next    remove         。
        MySQL  ResultSet   
    */
    void remove() 
    {
        throw new UnsupportedOperationException("remove");
    }
}

/**
 * 
 */
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;


/**
 * @author lenovo
 *
 */
public class Algotithms implements Iterable{
	private  Algorithm[] als;
	private  List alInfo;
	/**
	 * 
	 */
	public Algotithms(Algorithm[] als) {
		alInfo = new ArrayList();
		// TODO Auto-generated constructor stub
		this.als = als;
	}

	/* (non-Javadoc)
	 * @see java.lang.Iterable#iterator()
	 */
	public Iterator iterator() {
		// TODO Auto-generated method stub
		return new AlgorithmIterator();
	}
	private class AlgorithmIterator implements Iterator{
		private int index = 0;
		private int cursor = -1;
		/* (non-Javadoc)
		 * @see java.util.Iterator#hasNext()
		 */

		public boolean hasNext() {
			// TODO Auto-generated method stub
			return cursor != als.length;
		}

		/* (non-Javadoc)
		 * @see java.util.Iterator#next()
		 */

		public Algorithm next() {
			// TODO Auto-generated method stub
			Algorithm temp = als[index++];
			cursor += 1;
			
			return temp;
		}

		/* (non-Javadoc)
		 * @see java.util.Iterator#remove()
		 */
		
		public void remove() {
			// TODO Auto-generated method stub
			
		}
		
	}
	
	public List ergAlInfo(){
		for (Algorithm al : als){
			
		}
		return alInfo;
	}
}



foreachを使用するには、集合クラスはIEnumeratorインタフェースを実装する必要があるクラスfor(A a:aList)である