Java 从ArrayList中删除多个项时,为什么使用while循环而不是递减for循环更好?
我现在正在读一些编程书籍和在线课程(因此没有老师可以问),我在每本书中都看到了同样的内容。在每一个循环中,它都表示当您从Java中的ArrayList中删除多个项时,不应该使用for循环,而应该使用while循环。我理解你为什么不使用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%用例,因此它可能不是
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);
}