在一个ArrayList中使用两个迭代器

EXP*_*XP0 4 java iterator

编辑:感谢您的所有提示回复.现在我看到作业不起作用.从另一个线程我读到,Java中的迭代器比C++中的迭代器强大得多.请问为什么在Java中使用iterator?只是为了取代"for"循环?谢谢.

一些说明:

  • 第二个迭代器应该从第一个迭代器的位置开始.
  • 我尝试从头开始查看有序列表,在列表中找到一些具有与aItr指向的属性类似的对象.

我不介意使用两个"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不确定,我搜索了很多,但所有结果都使用迭代器来打印一些东西.非常感谢您的帮助.

Dil*_*nga 7

你不应该这样做:

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()方法或类似的东西,我同意你的意见......

  • 在Java中,当您不想了解底层的Collection实现时,可以使用Iterator.在Java 5以后,Iterator的使用较少(显式),因为for-each构造使用了Iterable和Iterator.在Java 5中,Iterator主要用于迭代和有条件地删除元素. (4认同)

anu*_*ava 5

如果你想要列表中位置n的第二个列表迭代器,那么使用List#listIterator(int index):

ListIterator bIter = list.listIterator(n);
Run Code Online (Sandbox Code Playgroud)