JAvaエッセイ

3645 ワード

Javaでの反復器の使用はJavaではデータコンテナが多いため、データコンテナの操作に大きな共通性があることが多いため、Javaは反復器を採用して各種コンテナに共通の操作インタフェースを提供している.
Javaの反復器iteratorを使用すると、コンテナの遍歴操作が底層から完全に分離され、優れたデカップリング効果が得られます.
 public interface Iterable

   Iterator iterator() 
          Returns an iterator over a set of elements of type T

CollectionインタフェースはインタフェースIterableを拡張し、以上のIterableインタフェースの定義に基づいて、クラスが反復器Iteratorオブジェクトに戻る方法を提供することを要求していることがわかります.
反復Iteratorインタフェースの定義は次のとおりです.
Interface Iterator
boolean  hasNext() 
          Returns true if the iteration has more elements.

 E  next() 
          Returns the next element in the iteration.

void  remove() 
          Removes from the underlying collection the last element returned by the iterator (optional operation).

注意:
以上の定義から、Iterable()インタフェースとIterator()インタフェースは完全に一致しているようで、何の違いもありません.学習したばかりの内部クラスと結びつけて,これはまたプログラムの多様化をサポートする巧みな設計であり,多状態とデカップリングを十分にサポートしていることが分かった.
1.すべてのCollectionタイプのオブジェクトがimplements Iterableインタフェースを強制的に要求されるため、どのCollectionオブジェクトもその反復器Iteratorを返すことができます.直接implement iteratorインタフェースを使用すると、CollectionはhasNext()などのメソッドを直接要求します.しかし,この方法はhasNext()などの操作をどのように実行するかを設定し,プログラムが非常に肥大化し複雑に見える多態性を備えていない.しかし、Iterable()インタフェースを実装し、Iteratorオブジェクトを返す方式を採用すると、Iteratorオブジェクトを返すことができる限り、独自の必要に応じて遍歴方式の自由定義を行うことができます.(すなわち、同じインタフェースに対して、実装クラスで多様で異なる方法を提供する).
Example:
  • ViewCode以上の例から分かるように、ScanAppleStoreクラスオブジェクトの遍歴を実現するために、2つの反復器が定義されている:
  • 1、public Iterator iterator():この反復器はScanAppleStore implements Iterableインタフェースの方法として定義され、従来の順序遍歴方式を採用し、for(String str:appleTree)時に自動的に転換呼び出しられる.
    2、public Iterable reverseIterator():この反復器は匿名の内部クラスを採用してIterableインタフェースを実現し、Iterableオブジェクトを返し、逆順序の遍歴方式を採用し、for(String str:appleTree.reverseIterator()の場合、appleTree.reverseIterator()を呼び出すことでIterableオブジェクトを返す.
    !foreach構文の標準形式は、for(T element:Iterable elements)です.
    Iterableインタフェースはiterator()メソッドを実装することを要求するため、iterator()メソッドはIteratorオブジェクトを返すことを要求し、IteratorはhasNext(),next(),remove()の3つの実装する必要があるメソッドを定義する.
    そのため、Iterableを実現するのは少しダラダラしていて複雑です.
    Example:
  • ViewCodeここでは匿名の内部クラスを採用しており、構造は非常に明確で、ここでは内部クラスがインタフェースを実現し、OOP Javaのプログラミング能力を強化する重要性を体現している.

  • 注意Iterableでは使用パターンが強調されているので、定義するときは必ずタイプを示すことに注意してください.
    反復インタフェースでは、クラスを実装するには3つの方法が必要です.
    hasNext():遍歴中に次の要素があるかどうかを判定します.(Collectionオブジェクトの最初の要素から)
    next():要素を巡回します.(次の要素を取り出します)
    remove():遍歴したばかりの要素を削除します.
    定義から,この3つの方法はしばしば組み合わせて用いられることが分かった.
    Examle:
    Iteraotr it= arrayList.Iterator();
    
    while(it.hasNext())
    
    {
    
      print(it.next());
    
          it.remove();
    
    }

    基本的な考え方は、次の要素を巡る前に、存在するかどうかを判断することです.削除したい要素については、先に遍歴する必要があるため、remove()メソッドは常にnext()メソッドの後に続く.