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