0
public interface IPowerList<T> extends Iterable< T > {

public int bitFlag(List<T> subseq);
}

public class PowerList<T> implements IPowerList<T>{

private List<T> originalList;
private Set<Set<T>> powerList= new HashSet<Set<T>>();

@Override
public Iterator<T> iterator() {
    // TODO Auto-generated method stub
    return null;
}

@Override
public int bitFlag(List<T> subseq) {
    // TODO Auto-generated method stub
    return 0;
}

}  

自動的に、Eclipse からオーバーライド メソッドを実装するように指示されましたiterator

(1) iterableから拡張したインターフェースを実装しているからでしょうか?

(2) 私のプライベート変数はセットとリストです。それらには独自の反復子があり、新しい反復子を定義する必要はありません。どうすればよいですか? 継承を削除する必要がありますか?

(3) 新しい反復子を定義する必要があるのはいつですか? ある種のコレクションであるクラスを定義するときは? しかし、私たちは常に独自のイテレータを持つジェネリックコレクションを使用しているため、なぜだろうか..例を挙げてもらえますか?

(4) セットのセットに追加した場合new HashSet<T>()、空リストの追加と見なされますか、または追加new HashSet().add(null)は空のリストと見なされますか?

4

2 に答える 2

2

(1) iterableから拡張したインターフェースを実装しているからでしょうか?

はい、iterator()インターフェースが extends しているため、メソッドを取得できますIterable。つまり、インターフェイスを実装するクラスは、 のすべてのメソッドも実装する必要がありますIterable。それを望まない場合は、拡張しないでくださいIterable

(2) 私のプライベート変数はセットとリストです。それらには独自の反復子があり、新しい反復子を定義する必要はありません。どうすればよいですか? 継承を削除する必要がありますか?

クラスのコンシューマーはプライベート メンバーを使用できないため、これらの反復子を公開する方法が必要です。それをどのように行うかはあなた次第ですが、あなたのiterate()方法でそれを行うことは非常に理にかなっています.

(3) 新しい反復子を定義する必要があるのはいつですか? ある種のコレクションであるクラスを定義するときは? しかし、私たちは常に独自のイテレータを持つジェネリックコレクションを使用しているため、なぜだろうか..例を挙げてもらえますか?

反復可能にしたい独自のコレクションを作成するが、それが を既に実装しているコレクションを拡張しないIterable場合は、独自の反復子を作成する必要があります。気にしなければ必要ありませんが、消費者の感じ方は異なるかもしれません。

于 2011-09-06T15:57:55.083 に答える
0

(1) はい。PowerList<T> implements IPowerList<T>実装するIterator<T> iterator()(またはサブタイプを返すIterator<T>) 必要があるためです。

(2) 継承を に任せIterable<T>ます。そうすれば、フィールドをカプセル化して (いずれにせよ非公開です)、イテレーターのみをエクスポートできます。第 2 に、どの種類の Iterator をエクスポートするかを決定でき、将来的にはより柔軟になります (列挙の順序を変更するなど)。最後に、Iterations とは何の関係もない場合は、IPowerList の Iterable を拡張しないことを考えることができます (私にはそのように思えます)。代わりに、PowerList に両方のインターフェイスを実装させます (Java ではインターフェイスの複数の継承が許可されています)。

(3) たとえば、セットのセットなど、新しいコレクションを作成する場合。または、列挙の順序や、イテレータが要素を追加および削除できるかどうかなど、イテレータの動作方法を変更したい場合。たとえば、一連の異なる反復子を返すことができるツリー構造があります (そして、反復子といくつかの同様のインターフェイスを実装します)。

于 2011-09-06T16:04:55.777 に答える