编辑:感谢您的所有提示回复.现在我看到作业不起作用.从另一个线程我读到,Java中的迭代器比C++中的迭代器强大得多.请问为什么在Java中使用iterator?只是为了取代"for"循环?谢谢.
一些说明:
我不介意使用两个"for"循环,但我知道Java对所有这些库都非常强大.我只是好奇是否有比两个"for"循环更好的方法.谢谢.
嗨,
我一直在使用C++,但我是Java的新手,所以请耐心等待.我尝试使用两个迭代器遍历ArrayList.第一个迭代器遍历列表,第二个迭代器从第一个迭代器指向的位置开始,一直到列表的末尾.以下代码是我想要做的(虽然可能无效):
.......; //initialize aList here ......
Iterator aItr = aList.iterator();
while(aItr.hasNext()){
int a = aItr.next();
Iterator bItr = aItr; //-----> is it valid? Any bad consequence?
while (bItr.hasNext()){
............; //do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
将一个迭代器分配给另一个迭代器是否有效?如果没有,那么做我想做的最好的方法是什么?谢谢.
我知道它在C++中有效,但对Java不确定,我搜索了很多,但所有结果都使用迭代器来打印一些东西.非常感谢您的帮助.
你不应该这样做:
Iterator bIter = aIter;
Run Code Online (Sandbox Code Playgroud)
因为Java中没有复制构造函数等; bIter将是对同一个底层迭代器的引用.
您可以这样使用ListIterator:
ListIterator aItr = aList.listIterator();
while (aItr.hasNext()) {
int a = aItr.next();
ListIterator bItr = aList.listIterator(aItr.previousIndex());
while (bItr.hasNext()) {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
但是如果你认为ListIterator应该有一个copy()方法或类似的东西,我同意你的意见......
如果你想要列表中位置n的第二个列表迭代器,那么使用List#listIterator(int index):
ListIterator bIter = list.listIterator(n);
Run Code Online (Sandbox Code Playgroud)