问题 用Java克隆迭代器


我在Java中有一个LinkedList,一个浏览列表的迭代器,我想克隆迭代器,对原始迭代器的位置做一些临时的“向前看”处理。

我知道克隆迭代器在每种情况下都是不可能的,但有没有办法将迭代器克隆到LinkedList(或保存并恢复其状态)?


3029
2017-10-09 08:29


起源



答案:


这是可能的,但Sun确保你不能(通过使这个类私有)。

但也许你可以用a实现你想要的 listIterator() 而不是平原 iterator()。一个 ListIterator 可以向两个方向移动。


11
2017-10-09 08:43



没关系。我将保存前面的步骤数,然后返回恢复状态的步骤数。 - Enrico Detoma


答案:


这是可能的,但Sun确保你不能(通过使这个类私有)。

但也许你可以用a实现你想要的 listIterator() 而不是平原 iterator()。一个 ListIterator 可以向两个方向移动。


11
2017-10-09 08:43



没关系。我将保存前面的步骤数,然后返回恢复状态的步骤数。 - Enrico Detoma


随着 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);

1
2017-10-09 08:56



但是从索引中获取迭代器意味着从头开始再次浏览列表。在我看来,这是一种非常昂贵的方法来生成克隆本质上是其他语言的指针,如C ++和标准库。 - Enrico Detoma