2013-03-19 27 views
1

我有一個Java TreeSet添加自定義的方法來迭代器在一個TreeSet在Java中

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.我該怎麼做?

+0

你需要做什麼? – flup 2013-03-19 23:54:53

回答

1

你在找什麼,我想,是tail set

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

請注意,這不是迭代器的功能,而是集合本身的功能。

0

最接近你想要的,你應該做的是寫一個靜態方法,看起來像<T> static void advance(Iterator<Integer>, Integer),將另一個迭代器推進到一個特定的位置。

您也許可以編寫一個迭代器裝飾器,您可以使用它來執行類似new MyIterator(treeSet.iterator())的操作,並且可以使用MyIterator類提供的其他方法。

什麼你可能不應該能做的就是盡力繼承TreeSet或更改你得到了TreeSet的迭代器。相反,在這些迭代器之上操作或裝飾它們是一種方法。

+0

很難將它包裝在任何普通的迭代器中。如果迭代器已經讀取了它在搜索時必須做的5,那麼它將會是一個太過於毫無意義的位置。沒有? – flup 2013-03-19 23:54:08

+0

'TreeSet'只是給你「普通的迭代器」。在可能的範圍內,這可以通過這種方式實現。如果OP告訴我們他們真正想用這種奇特的方法來做什麼,我們或許能夠提出更多有用的建議。 – 2013-03-19 23:55:21

+0

同意。我的意思是,treeset把你的普通迭代器,你執行seek()做next()next()next(),直到你達到5個。但是現在你讀得太多了,next()會產生7。迭代器無法備份我認爲的一個位置? – flup 2013-03-19 23:58:26

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() { 
     // ... 
    } 
} 
+0

好吧...如果我這樣做有一種方法來保持hasNext(),next()的原始功能,因爲當我使用時基於TreeSet的基礎迭代器? – user1950055 2013-03-20 00:04:08

+0

即我不想重寫hasNext,next和remove功能.... – user1950055 2013-03-20 00:05:07

+0

如何實例化迭代器?這是樹形結構把它們傳遞出去。 – flup 2013-03-20 00:07:37

相關問題