1

我有一个 Java TreeSet

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

我在这个 TreeSet 上声明了一个迭代器,如下所示:

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

现在,tsAI有类似hasNext()and的方法next()。但是,我想在调用的迭代器中添加一个自定义方法以及原始方法seek(num),它将迭代器放置在numTreeSet 中所需的位置。

所以说如果我TreeSet有值(1, 2, 3, 4, 5, 7)并且我在 2 并且我调用seek(5)迭代器应该跳转到 5。我该怎么做?

4

3 回答 3

1

我认为您正在寻找的是tail set

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 回答