Java 在一个ArrayList中使用两个迭代器
编辑:感谢您的及时回复。现在我明白了,作业不起作用了。从另一个线程中,我读到java中的迭代器比C++中的迭代器要强大得多。我可以问一下为什么在Java中使用迭代器吗?只是为了替换“for”循环?谢谢 一些注意事项:Java 在一个ArrayList中使用两个迭代器,java,iterator,Java,Iterator,编辑:感谢您的及时回复。现在我明白了,作业不起作用了。从另一个线程中,我读到java中的迭代器比C++中的迭代器要强大得多。我可以问一下为什么在Java中使用迭代器吗?只是为了替换“for”循环?谢谢 一些注意事项: 第二个迭代器应该从第一个迭代器之前的位置开始 我试着从一开始就遍历一个有序的列表,从列表中找到一些与aItr所指出的属性相似的对象 我不介意使用两个“for”循环,但我知道Java对所有这些库都非常强大。我只是好奇是否有比两个“for”循环更好的方法。谢谢 嗨 我一直使用C++
- 第二个迭代器应该从第一个迭代器之前的位置开始
- 我试着从一开始就遍历一个有序的列表,从列表中找到一些与aItr所指出的属性相似的对象李>
Iterator bIter = aIter;
因为Java中没有复制构造函数等;比特将是对同一底层迭代器的引用
可以通过以下方式使用ListIterator:
ListIterator aItr = aList.listIterator();
while (aItr.hasNext()) {
int a = aItr.next();
ListIterator bItr = aList.listIterator(aItr.previousIndex());
while (bItr.hasNext()) {
// ...
}
}
但是,如果您认为ListIterator应该有一个copy()方法或类似的方法,我同意您的看法…因为您似乎在使用列表,在您的情况下,最简单的解决方案是使用两个索引,如下所示:
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);
}
}
它是有效的,但它不会做你想让它做的事。您仍然只有一个迭代器,外部循环将在内部循环第一次终止后终止
Java迭代器不能被有意义地复制。您必须使用一个简单的for循环来增加索引。如果您想在列表中的位置n处使用第二个列表迭代器,请使用: 这样做:
ArrayList<String> aList = new ArrayList<String>();
// do something to fill the list
for (int i = 0; i < aList.size(); i++)
{
ArrayList<String> bList = aList.subList(i, aList.size());
for (int j = 0; j < bList.size(); j++)
{
// do stuff with the sublist
}
}
ArrayList aList=new ArrayList();
//做点什么来填这个清单
对于(int i=0;i
需要注意的是,bList由aList支持,因此对bList的更改将反映在aList中……进行非结构性更改只是为了保持您的理智。谢谢!你是对的。我没有在Java中找到迭代器的复制构造函数。这就是为什么我感到困惑,因为它限制了迭代器的使用。那么在Java中,人们使用迭代器只是为了替换for循环吗?我可以用两个for循环来得到我想要的吗?谢谢。在Java中,当您不想了解底层集合实现时,可以使用迭代器。在Java5以后的版本中,迭代器的使用较少(显式),因为for-each构造下面使用Iterable和迭代器。在Java5中,迭代器主要用于迭代和有条件地删除元素。谢谢。如果我想bItr指向下一个对象,我想应该使用nextIndex()。这会导致任何超出范围的问题吗?在使用nextIndex之前需要检查吗?谢谢。不幸的是,如果在第二次调用bItr.remove()时,您将得到ConcurrentModificationException,在我的情况下,这是非常令人伤心的。在创建之后,第二个迭代器应该指向哪里?在第一个位置还是在第一个点位置之后?正如下面所提到的,这并不是您希望它做的。也许你可以分享你想要完成的事情,以便找到更好的方法?谢谢。我编辑这篇文章来描述我真正想做的事情。谢谢!请问如何从第一个迭代器中得到“n”(索引)?如果它是C++,我可以使用“AsiaTrist.Nosig()”。这是我在Java中可以做到的吗?请看这个Javadoc for ListIterator:有两个方法nextIndex()和previousIndex(),它们将为您提供第一个ListIterator的索引。
aList.subList(i, aList.size()).iterator();
ListIterator bIter = list.listIterator(n);
ArrayList<String> aList = new ArrayList<String>();
// do something to fill the list
for (int i = 0; i < aList.size(); i++)
{
ArrayList<String> bList = aList.subList(i, aList.size());
for (int j = 0; j < bList.size(); j++)
{
// do stuff with the sublist
}
}