在Java中的TreeSet中向迭代器添加自定义方法

时间:2013-03-19 23:44:57

标签: java methods iterator treeset

我有一个Java TreeSet

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

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

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

现在,tsAI包含hasNext()next()等方法。但是,我想在名为seek(num)的迭代器中添加一个自定义方法和原始方法,它将迭代器放在TreeSet中所需的num

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

3 个答案:

答案 0 :(得分:1)

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

tsA.tailSet(5).iterator()将迭代集合中所有大于或等于5的元素。

请注意,这不是迭代器的函数,而是集合本身的函数。

答案 1 :(得分:0)

你想要做的最接近你应该做的是写一个静态方法,看起来像<T> static void advance(Iterator<Integer>, Integer),它将另一个迭代器推进到一个特定的位置。

您也可以编写一个迭代器装饰器,使用它来执行类似new MyIterator(treeSet.iterator())的操作,您可以使用MyIterator类提供的其他方法。

你可能不应该做的是尝试子类化TreeSet或更改你从TreeSet中获得的迭代器。相反,在这些迭代器上运行或装饰它们是可行的方法。

答案 2 :(得分: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() {
        // ...
    }
}