我需要遍历LinkedList
多次,建议使用ListIterator
。java:重置ListIterator?
有没有办法重置ListIterator
?或者创建一个新的更好? (如果我不能,因为我没有什么访问列表?)
编辑:,是有办法来创建一个ListIterator
指向列表的末尾? (使hasNext()
是假的,但我可以用previous()
或hasPrevious()
)
我需要遍历LinkedList
多次,建议使用ListIterator
。java:重置ListIterator?
有没有办法重置ListIterator
?或者创建一个新的更好? (如果我不能,因为我没有什么访问列表?)
编辑:,是有办法来创建一个ListIterator
指向列表的末尾? (使hasNext()
是假的,但我可以用previous()
或hasPrevious()
)
创建基于所获得的ListIterator
新LinkedList
,所以只要你想,你可以从它那里得到尽可能多的迭代器。
编辑:对于您之后编辑的第二个问题,请考虑先在列表中执行Collections#reverse()
。
如果你可以创建一个新的,可能是你最好的选择。
如果您不能,当您正在浏览列表迭代器时,将每个元素添加到新列表中。使用该新列表在下次需要时创建listIterator。
说到性能,创建一个新的迭代器可能会更快。如果您没有列表,您仍然可以使用hasPrevious()和previous()向后移动,直到您将迭代器放置在列表的开头。根据列表实现,您可能会遇到相关的性能影响,通过迭代器向后导航。
看起来像AbstractList.listIterator(int initialPos)
是我想用于一个ArrayList,LinkedList.descendingIterator()
是我想用于LinkedList,但似乎没有一种方法,将有效地适用于这两个,和descendingIterator( )返回一个Iterator,而不是一个ListIterator。 DRAT。
import java.util.AbstractList;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;
public class ListIteratorTest {
static public void populate(List<Integer> list)
{
for (int i = 0; i < 10; ++i)
{
list.add(i*i);
}
}
static public void main(String[] args)
{
AbstractList<Integer> list = new ArrayList<Integer>();
populate(list);
ListIterator<Integer> it;
System.out.println("List going forwards:");
it = list.listIterator();
while (it.hasNext())
System.out.println(it.next());
System.out.println("List going backwards:");
it = list.listIterator(list.size());
while (it.hasPrevious())
System.out.println(it.previous());
LinkedList<Integer> list2 = new LinkedList<Integer>();
populate(list2);
System.out.println("List going forwards:");
it = list2.listIterator();
while (it.hasNext())
System.out.println(it.next());
System.out.println("List going backwards:");
Iterator<Integer> it2 = list2.descendingIterator();
while (it2.hasNext())
System.out.println(it2.next());
}
}
ick,我不能扭转列表。阿福。好像Java的迭代器不如C的STL迭代器好。 – 2010-01-27 16:44:46