我现在正在阅读一些编程书籍和在线课程(所以没有老师可以问),而且我在每个人看到过同样的事情。在每一个中,它表示当你从Java中的ArrayList中删除多个项目时,你不应该使用for循环而是使用while循环。我理解你为什么不使用
for (int i = 0; i < arylst.size(); i++)
{...}
但是当我尝试这样做时
for (int i = arylst.size() - 1; i >= 0; i--)
{...}
答案 0 :(得分:3)
如果您使用for-each
循环删除List
或ArrayList
中的元素,则会面临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);
}
}
请查看此链接:http://docs.oracle.com/javase/tutorial/collections/interfaces/collection.html
据说:
请注意,Iterator.remove是修改集合的唯一安全方法 在迭代期间;如果底层的行为是未指定的 在迭代进入时,以任何其他方式修改集合 进展。
for each
循环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);
}
答案 1 :(得分:2)
关于递减循环没有任何不正确之处。
它可以并且通常导致的唯一问题是错误,因为写入时缺少符号。它不是for循环的90%用例,因此它可能不是每个人都能直观地编写,因此更容易导致错误。 这就是为什么在教学书籍中首选while循环。