Java 是否可以擦除for()循环中的ArrayList元素?
我有以下代码: outlets是传递给方法的ArrayList; 河流流域是int(int[][]河流流域)的2D“矩阵” 我真的不完全理解。然而,我怀疑我弄坏了迭代器。 对的然后我如何删除ArrayList中不需要的元素 提前感谢您的帮助Java 是否可以擦除for()循环中的ArrayList元素?,java,arraylist,iterator,Java,Arraylist,Iterator,我有以下代码: outlets是传递给方法的ArrayList; 河流流域是int(int[][]河流流域)的2D“矩阵” 我真的不完全理解。然而,我怀疑我弄坏了迭代器。 对的然后我如何删除ArrayList中不需要的元素 提前感谢您的帮助 riccardo您应该使用迭代器迭代ArrayList。然后使用迭代器的remove方法。您应该使用迭代器迭代ArrayList。然后使用迭代器的remove方法。您需要显式使用迭代器并调用remove() final Iterator Iterator=o
riccardo您应该使用迭代器迭代ArrayList。然后使用迭代器的remove方法。您应该使用迭代器迭代ArrayList。然后使用迭代器的remove方法。您需要显式使用迭代器并调用remove()
final Iterator Iterator=outlets.Iterator();
while(iterator.hasNext()){
final int[]item=iterator.next();
....
如果(…){
iterator.remove();
}
}
您需要显式使用迭代器并调用remove()
final Iterator Iterator=outlets.Iterator();
while(iterator.hasNext()){
final int[]item=iterator.next();
....
如果(…){
iterator.remove();
}
}
使用“for each”循环无法删除。您可以使用迭代器代替它。您不能通过使用“for each”循环来删除它。您可以使用迭代器代替它。您必须通过迭代器删除条目。这意味着您不能使用增强前循环
尝试:
for(迭代器outletsIterator=outlets.Iterator();outletsIterator.hasNext();){
int[]item=outletsIterator.next();
...
outletsIterator.remove();
}
注意:不建议混合使用泛型和数组。考虑使用:<代码>清单>代码> ,您必须通过迭代器删除条目。这意味着您不能使用增强前循环 尝试:
for(迭代器outletsIterator=outlets.Iterator();outletsIterator.hasNext();){
int[]item=outletsIterator.next();
...
outletsIterator.remove();
}
注意:不建议混合使用泛型和数组。考虑使用:<代码>列表<代码> < /P>
这是一个先进的for循环。在内部,它执行的操作与创建集合的迭代器并对其进行迭代相同。但是,如果显式地不获取迭代器对象,则会失去从集合中删除元素的功能,因为如果在迭代器对其进行迭代时尝试从集合中删除元素,则始终会获得java.util.ConcurrentModificationException
因此,在您的例子中,通过outlets.iterator()获取迭代器
并使用它的remove方法迭代器.remove()代码>
最好只对读取操作使用高级循环
这是一个先进的for循环。在内部,它执行的操作与创建集合的迭代器并对其进行迭代相同。但是,如果显式地不获取迭代器对象,则会失去从集合中删除元素的功能,因为如果在迭代器对其进行迭代时尝试从集合中删除元素,则始终会获得java.util.ConcurrentModificationException
因此,在您的例子中,通过outlets.iterator()获取迭代器
并使用它的remove方法迭代器.remove()代码>
最好只对读取操作使用高级循环 在对集合进行迭代时,不允许直接从集合中删除项。
要解决您的问题,请使用以下任一解决方案:
使用Collection interface
的iterate()
方法获取Iterator
代表
然后遍历集合并从迭代器中删除所需的项
使用Collection interface
的iterate()
方法获取Iterator
代表你的
集合,然后对其进行迭代,并通过复制所需的项来标记要删除的项
新集合对象中的引用。然后在迭代完成之后
调用remove(集合c)
方法从集合对象中删除所需项(类似于从中复制所需项)
通过将列表迭代到一个新列表,并在迭代后调用如下方法:
您的\u列表\u对象。删除(新的\u列表\u对象)
有关详细信息,请参阅)
来源:在对集合进行迭代时,不允许直接从集合中删除项。
要解决您的问题,请使用以下任一解决方案:
使用Collection interface
的iterate()
方法获取Iterator
代表
然后遍历集合并从迭代器中删除所需的项
使用Collection interface
的iterate()
方法获取Iterator
代表你的
集合,然后对其进行迭代,并通过复制所需的项来标记要删除的项
新集合对象中的引用。然后在迭代完成之后
调用remove(集合c)
方法从集合对象中删除所需项(类似于从中复制所需项)
通过将列表迭代到一个新列表,并在迭代后调用如下方法:
您的\u列表\u对象。删除(新的\u列表\u对象)
有关详细信息,请参阅)
来源:已经发布了一些类似的问题和答案:
您可以跟踪要删除的项的索引,然后在完成迭代后删除它们
或者,您可以在迭代时将所有要保留的内容复制到新列表中,然后在完成后丢弃旧列表
资料来源:(hvgotcodes)
在ArrayList
outlets上使用toArray()
函数,在阵列上进行迭代,并从ArrayList
outlets中删除
已经发布了一些类似的问题
for (int[] item: outlets) {
if (item[0] < 2 || item[0] > this.riverBasin.length - 1 || item[1] < 2 || item[1] > this.riverBasin[0].length - 1) {
System.out.println("This provisionally substitutes error catching. Outlet (" + item[0] + "," + item[1] + ") is not correct.");
outlets.remove(item);
System.out.println("Remaining outlets: ");
for (int[] atem: outlets) {
System.out.print("(" + atem[0] + "," + atem[1] + ")\n");
}
}
else {
this.riverBasin[item[0]][item[1]] = 10;
}
}
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
at java.util.AbstractList$Itr.next(AbstractList.java:343)
at org.geoframe.ocn.Eden.setMultipleOutlet(Eden.java:135)
at org.geoframe.ocn.Eden.main(Eden.java:205)
final Iterator<int[]> iterator = outlets.iterator();
while (iterator.hasNext()) {
final int[] item = iterator.next();
....
if (...) {
iterator.remove();
}
}
for(Iterator<int[]> outletsIterator = outlets.iterator(); outletsIterator.hasNext();){
int[] item = outletsIterator.next();
...
outletsIterator.remove();
}
for (int[] item: outlets) {}
for(int i=0;i < l.size() ; i++){
//some condtions to check the element
//if you want to delete this element or index
l.remove(i); or l.remove(l.get(i));
}