我在Java中有一個LinkedList,它是一個瀏覽列表的迭代器,我想克隆迭代器,以便相對於原始迭代器的位置執行一些臨時「向前看」處理列表。Java中的克隆迭代器
我知道在任何情況下克隆迭代器都是不可能的,但是有沒有辦法將迭代器克隆到LinkedList(或保存並恢復其狀態)?
我在Java中有一個LinkedList,它是一個瀏覽列表的迭代器,我想克隆迭代器,以便相對於原始迭代器的位置執行一些臨時「向前看」處理列表。Java中的克隆迭代器
我知道在任何情況下克隆迭代器都是不可能的,但是有沒有辦法將迭代器克隆到LinkedList(或保存並恢復其狀態)?
這是可能的,但是Sun確保你不能(通過使課程變得私密)。
但也許你可以使用listIterator()
而不是普通的iterator()
來達到你想要的效果。 A ListIterator
可以在兩個方向上移動。
使用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);
但是從索引獲取迭代器意味着從頭開始再次瀏覽列表。在我看來,用一種非常昂貴的方法來生成一個克隆,它本質上就是C++等其他語言中的指針,並帶有標準庫。 – 2009-10-09 10:05:10
這是確定。我將保存前面的步驟數,然後返回該步驟來恢復狀態。 – 2009-10-09 08:47:51