单线程代码上的ConcurrentModificationException是一种运行时异常,通常在遍历集合(如ArrayList、HashMap等)时,同时对集合进行修改(如添加、删除、修改元素)时抛出。这种异常的出现是因为在遍历过程中,集合的内部结构发生了变化,导致遍历过程出现错误。
解决方法:
使用集合的iterator()方法获取一个迭代器,然后使用迭代器的remove()方法进行元素的删除操作。
示例代码:
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String element = iterator.next();
if (element.equals("B")) {
iterator.remove();
}
}
并发集合在遍历过程中不会抛出ConcurrentModificationException异常,但是需要注意并发集合在修改操作时会创建新的集合对象,因此可能会存在内存泄漏的风险。
示例代码:
List<String> list = new CopyOnWriteArrayList<>();
list.add("A");
list.add("B");
list.add("C");
for (String element : list) {
if (element.equals("B")) {
list.remove(element);
}
}
Stream API提供了一种函数式编程的方式进行集合操作,可以避免ConcurrentModificationException异常。
示例代码:
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
list.stream()
.filter(element -> !element.equals("B"))
.collect(Collectors.toList());
推荐的腾讯云相关产品:
产品介绍链接地址:
领取专属 10元无门槛券
手把手带您无忧上云