Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否可以擦除for()循环中的ArrayList元素?_Java_Arraylist_Iterator - Fatal编程技术网

Java 是否可以擦除for()循环中的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

我有以下代码:

outlets是传递给方法的ArrayList; 河流流域是int(int[][]河流流域)的2D“矩阵”

我真的不完全理解。然而,我怀疑我弄坏了迭代器。 对的然后我如何删除ArrayList中不需要的元素

提前感谢您的帮助


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));
    }