我在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