2009-10-09 92 views
11

我在Java中有一個LinkedList,它是一個瀏覽列表的迭代器,我想克隆迭代器,以便相對於原始迭代器的位置執行一些臨時「向前看」處理列表。Java中的克隆迭代器

我知道在任何情況下克隆迭代器都是不可能的,但是有沒有辦法將迭代器克隆到LinkedList(或保存並恢復其狀態)?

回答

11

這是可能的,但是Sun確保你不能(通過使課程變得私密)。

但也許你可以使用listIterator()而不是普通的iterator()來達到你想要的效果。 A ListIterator可以在兩個方向上移動。

+0

這是確定。我將保存前面的步驟數,然後返回該步驟來恢復狀態。 – 2009-10-09 08:47:51

1

使用ListIterator您可以存儲下一個元素的索引,並可以基於該索引獲取新的ListIterator

像這樣的東西(Java 1.5的例子):

LinkedList<Integer> list = new LinkedList<Integer>(); 
ListIterator<Integer> lit = list.listIterator(0); 
<<do something here >> 
int index = lit.nextIndex(); 
ListIterator<Integer> litclone = list.listIterator(index); 
+7

但是從索引獲取迭代器意味着從頭開始再次瀏覽列表。在我看來,用一種非常昂貴的方法來生成一個克隆,它本質上就是C++等其他語言中的指針,並帶有標準庫。 – 2009-10-09 10:05:10