Iteratorコレクション反復器

1462 ワード

なぜIterator反復器はクラスではなくインタフェースを定義しているのでしょうか.
Iterator反復器がクラスであれば考えてみましょう.では、反復器を直接作成し、その遍歴方法を使用することができます.これは便利ではありませんか.しかし、Javaは私たちに多くの異なる集合クラスを提供してくれましたが、これらの異なる集合には異なるデータ構造があります.したがって、それらの格納方法と遍歴方法も異なるはずです.結局、反復器のクラスは定義されません.
しかし、どの集合であれ、要素を取得する機能(Iterator.next()を備えなければならない.また、補助的な判断の機能方法(Iterator.hasNext())を組み合わせたほうがいい.では,各集合に取得と判断の機能がある以上,機能方法を抽出できると考えられるが,具体的な実現はない.インタフェースと呼ばれますこれもIteratorがクラスではなくインタフェースとして定義されている理由です.
では、本当の具体的な実装クラスはどこにあるのでしょうか.もちろん、具体的なサブクラスで実現されています.具体的には、ソースコードを見てください.
      
public interface Iterator {   
boolean hasNext();
Object next();
 }

        
public interface Iterable {
    Iterator iterator();
}

Collection             
public interface Collection extends Iterable { 
  Iterator iterator();  
}

 List  ,   Collection  ,              
  public interface List extends Collection {
Iterator iterator();
 }

ArrayList        ,     Iterator     
public class ArrayList implements List { 
public Iterator iterator() {
    return new Itr();
  }


Itr Iterator      , ArrayList       
      Iterator     :hasNext(),next(),remove()
private class Itr implements Iterator {
    public boolean hasNext() {}       
    public Object next(){} 
    }
}

Collection c = new ArrayList();
c.add("hello");
c.add("world");
c.add("java");
Iterator it = c.iterator();  //         ArrayList    new Itr();
while(it.hasNext()) {
String s = (String)it.next();
System.out.println(s);
}