Java 从ArrayList中删除多个项时,为什么使用while循环而不是递减for循环更好?

Java 从ArrayList中删除多个项时,为什么使用while循环而不是递减for循环更好?,java,for-loop,arraylist,Java,For Loop,Arraylist,我现在正在读一些编程书籍和在线课程(因此没有老师可以问),我在每本书中都看到了同样的内容。在每一个循环中,它都表示当您从Java中的ArrayList中删除多个项时,不应该使用for循环,而应该使用while循环。我理解你为什么不使用 for(int i=0;i=0;i--) {…} 它似乎工作得很好。在某些情况下,这会导致问题吗?为什么这不是正确的方法?递减for循环没有什么不正确的 它唯一可能而且通常确实导致的问题是错误,因为在编写时缺少一个符号。它不是for循环的90%用例,因此它可能不是

我现在正在读一些编程书籍和在线课程(因此没有老师可以问),我在每本书中都看到了同样的内容。在每一个循环中,它都表示当您从Java中的ArrayList中删除多个项时,不应该使用for循环,而应该使用while循环。我理解你为什么不使用

for(int i=0;i

但是当我试着这样做的时候

for(int i=arylst.size()-1;i>=0;i--)
{…}


它似乎工作得很好。在某些情况下,这会导致问题吗?为什么这不是正确的方法?

递减for循环没有什么不正确的

它唯一可能而且通常确实导致的问题是错误,因为在编写时缺少一个符号。它不是for循环的90%用例,因此它可能不是每个人都可以直观地编写的,因此更容易导致bug。
这就是为什么在教学书籍中首选while循环。

如果对每个
循环使用
列表
数组列表
中删除元素,您将面临
java.util.ConcurrentModificationException
。您需要使用
java.util.Iterator

以下是一个例子:-

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Test {
    public static void main(String[] args) {
        List<Integer> list= new ArrayList<Integer>();
        for(int i=1; i<=10; i++){
            list.add(i);
        }
        System.out.println("list (before) = "+list);

        // removing the even elements
        System.out.println("even numbers have been removed");
        Iterator<Integer> iterator =list.iterator();
        while(iterator.hasNext()){
            Integer num= iterator.next();
            if(num%2==0){
                iterator.remove();
            }
        }       
        System.out.println("list (after) = "+list);     
    }

}

我在4个地方看到了这一点,但没有一个地方提到了递减for循环的概念。他们只是说不要使用for循环,正确的方法是使用while循环。更多的上下文将真正帮助这个问题:)似乎是一个荒谬的建议。在哪方面更好?书,佩奇?@MakPo我可以知道为什么这个答案不能解决你所面临的问题吗?我并不是投反对票的那个人。这可能是正确的,但我并不真正理解迭代器是什么,也不理解ConcurrentModificationException。我现在正在Java文档中查找。@MakPo您能看一下我的答案中添加的内容吗?不管您使用的是什么类型的循环,我都会添加这些内容(无论是
for
还是
while
在迭代列表时修改列表最安全的方法是使用和
迭代器
。因此,可以使用
for
循环和
迭代器
)it@MakPo当您需要在迭代列表时修改列表时,我建议您始终使用
迭代器
public static void main(String[] args) {
    List<Integer> list= new ArrayList<>();
    for(int i=1; i<=10; i++){
        list.add(i);
    }
    System.out.println("list (before) = "+list);

    // removing the even elements
    System.out.println("even numbers have been removed");

    for(Iterator<Integer> iterator = list.iterator(); iterator.hasNext(); ){
        Integer num = iterator.next();
        if(num%2==0){
            iterator.remove();
        }
    }       
    System.out.println("list (after) = "+list);     
}