编辑:谢谢你所有的提示回复。现在我看到作业不管用了。从另一个线程中,我看到Java中的迭代器比C++中的迭代器强大得多。那么,我可以问为什么在Java中使用迭代器吗?就为了替换"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
}
}将一个迭代器分配给另一个迭代器有效吗?如果没有,那么做我想做的事情的最好方法是什么?谢谢。
我知道它在C++中是有效的,但对Java不确定,我在googled上搜索了很多,但是所有的结果都使用迭代器来打印东西。非常感谢你的帮助。
发布于 2011-05-25 15:16:53
你不该这样做:
Iterator bIter = aIter;因为在Java中没有复制、构造函数等;bIter将是对相同底层迭代器的引用。
您可以这样使用ListIterator:
ListIterator aItr = aList.listIterator();
while (aItr.hasNext()) {
int a = aItr.next();
ListIterator bItr = aList.listIterator(aItr.previousIndex());
while (bItr.hasNext()) {
// ...
}
}但是如果你认为ListIterator应该有一个拷贝()方法或者类似的东西,我同意你的观点.
发布于 2011-05-25 15:21:45
如果您希望在列表中的位置n处有第二个列表迭代器,那么使用List#listIterator(int指数)
ListIterator bIter = list.listIterator(n);发布于 2011-05-25 15:20:13
由于您似乎在使用列表,所以在您的示例中,最简单的解决方案是使用两个索引,如下所示:
for (int i = 0; i < aList.size(); i++) {
for (int j = i; j < aList.size(); j++) {
// do stuff with aList's elements
aList.get(j);
}
}使用迭代器,您可以实现类似的任务,但是您必须为内部循环构造新的迭代器,可能是从
aList.subList(i, aList.size()).iterator();https://stackoverflow.com/questions/6126763
复制相似问题