1

私はJavaを持っていますTreeSet:

TreeSet<Integer> tsA = new TreeSet<Integer>();  

この TreeSet に対してイテレータを次のように宣言します。

Iterator<Integer> tsAI = tsA.iterator();  

現在、や などtsAIのメソッドがhasNext()ありnext()ます。ただし、呼び出されたイテレータに元のメソッドと一緒にカスタム メソッドを追加したいと思います。これにより、TreeSetseek(num)の必要な場所にイテレータが配置されます。num

たとえば、TreeSet(1, 2, 3, 4, 5, 7)があり、2 にいて、イテレータを呼び出しseek(5)て 5 にジャンプする必要があるとします。どうすればこれを行うことができますか?

4

3 に答える 3

1

あなたが探しているのは、テールセットだと思います。

tsA.tailSet(5).iterator()セット内の 5 以上のすべての要素を反復処理します。

これは反復子の関数ではなく、セット自体の関数であることに注意してください。

于 2013-03-20T00:05:24.910 に答える
0

あなたが本当にしたいことに最も近いのは、<T> static void advance(Iterator<Integer>, Integer)別の反復子を特定の位置に進めるような静的メソッドを書くことです。

また、イテレータ デコレータを作成してnew MyIterator(treeSet.iterator())、クラスで提供される追加のメソッドを使用することもできますMyIterator

おそらくすべきでないTreeSetことは、 から取得するイテレータをサブクラス化または変更しようとすることですTreeSet。代わりに、これらのイテレータの上で操作するか、それらを装飾することが道です。

于 2013-03-19T23:53:05.620 に答える
0

これが良いアイデアかどうかはわかりませんが、次のようなものから始めることができます。

import java.util.Iterator;
interface MyIterator extends Iterator {
    void seek(int n);
}
class MyIteratorImpl implements MyIterator {
    @Override public void seek(int n) {
        // ...
    }
    @Override public boolean hasNext() {
        // ...
        return false;
    }
    @Override public Object next() {
        // ...
        return null;
    }
    @Override public void remove() {
        // ...
    }
}
于 2013-03-19T23:59:15.097 に答える