2009-10-09 68 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