我需要知道如何将LinkedList迭代器"重置"到它的第一个元素。
例如:
LinkedList<String> list;
Iterator iter=list.listIterator;
iter.next();
iter.next();
一次又一次地,在迭代器移动了很多次之后,我需要"重置"迭代器的位置。
我想问一下如何将迭代器"重置"到第一个元素。
我知道我可以用这种方法得到第一个元素的列表迭代器:
iter= list.listIterator(1);
这是最好的解决方案吗?或者可能是我在Oracle文档中遗漏了一些东西?
8条答案
按热度按时间cyej8jka1#
你可以再次调用
listIterator
方法来获得一个指向list开头的迭代器示例:9nvpjoqh2#
最好是根本不使用
LinkedList
,通常它在所有领域都比较慢,而且不方便(主要是在前面插入/删除时,特别是对于大数组,LinkedList比较快)使用
ArrayList
,并使用迭代重置是微不足道的,只需再次循环即可。
如果你坚持使用迭代器,那么你必须使用一个新的迭代器:
(我一生中只见过一次LinkedIn的优势:我可以用while循环遍历并删除第一个元素)
4ioopgfo3#
这是一个替代解决方案,但有人可能会说,它没有增加足够的价值,使它值得:
调用hasNext()会将迭代器光标重置到开头(如果它是结尾)。
c2e8gylq4#
实际上,您可能需要使用一个
Iterable
,它可以通过调用iterator()
多次返回一个新的Iterator
。您必须事先定义
iterator()
方法执行的操作一次:b4lqfgs45#
如果顺序无关紧要,我们可以使用
hasPrevious()
和previous()
方法,用相同的迭代器重新迭代backward:最初,迭代器位于开始位置,我们进行 forward 迭代:
然后迭代器位于末尾,我们可以做向后迭代:
8fq7wneg6#
在Collection impl上调用
iterator()
,可能会在每次调用时获得一个新的Iterator。因此,只需再次调用
iterator()
即可获得一个新值。编号
kcrjzv8t7#
你可以做的是,用while循环手动地将迭代器设置到第一个位置。
当你退出循环时,你的迭代器会在位置0
抱歉有任何语法错误
pieyvz9o8#
有些版本的java没有重置迭代器的方法,所以我们需要使用多个迭代器,这最终会增加内存消耗。
所以如果需要的话,通过声明一个全局函数并将集合作为参数传递,再次使用相同的迭代器是一种简单的方法。
例如enter image description here
例如(书面程序)包com。javalearn;
导入java.util.ArrayList;导入java.util.Iterator;
公共类Java学习{
}