在Java中,当你在遍历一个集合(如List)的同时尝试修改它,就会抛出ConcurrentModificationException
异常。这是因为Java的集合框架在内部维护了一个修改计数器,当你通过迭代器以外的方式修改集合时,这个计数器与迭代器的预期不一致,从而引发异常。
避免ConcurrentModificationException
异常可以确保程序的稳定性和可靠性,避免在运行时出现不可预料的错误。
这个问题主要涉及到的是Java集合框架中的List及其迭代器。
在需要遍历并修改List的场景中,如数据清洗、过滤、转换等。
当你在嵌套循环中遍历一个List,并尝试在内部循环中删除元素时,就会触发这个异常。
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
Iterator<Integer> iterator = list.iterator();
while (iterator.hasNext()) {
Integer num = iterator.next();
if (num % 2 == 0) {
iterator.remove();
}
}
System.out.println(list); // 输出: [1, 3, 5]
}
}
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
List<Integer> filteredList = list.stream()
.filter(num -> num % 2 != 0)
.collect(Collectors.toList());
System.out.println(filteredList); // 输出: [1, 3, 5]
}
}
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
List<Integer> newList = new ArrayList<>();
for (Integer num : list) {
if (num % 2 != 0) {
newList.add(num);
}
}
System.out.println(newList); // 输出: [1, 3, 5]
}
}
通过以上方法,你可以避免在嵌套循环中修改List时引发的ConcurrentModificationException
异常。选择哪种方法取决于你的具体需求和代码结构。
领取专属 10元无门槛券
手把手带您无忧上云