当在使用ArrayList迭代时,如果同时对其进行修改操作,就会抛出ConcurrentModificationException异常。解决这个问题的方法有以下几种:
Iterator接口的iterator()方法获取迭代器,并使用hasNext()和next()方法遍历元素。如果需要移除元素,可以使用remove()方法。这种方法不会抛出ConcurrentModificationException异常。ArrayList list = new ArrayList<>();
Iterator iterator = list.iterator();
while (iterator.hasNext()) {
Integer element = iterator.next();
// 对元素进行操作
if (condition) {
iterator.remove();
}
}
CopyOnWriteArrayList:CopyOnWriteArrayList是ArrayList的线程安全版本,它通过在修改时创建一个副本来解决并发修改问题。使用CopyOnWriteArrayList可以避免ConcurrentModificationException异常。CopyOnWriteArrayList list = new CopyOnWriteArrayList<>();
for (Integer element : list) {
// 对元素进行操作
if (condition) {
list.remove(element);
}
}
synchronized关键字同步访问:使用synchronized关键字对ArrayList进行同步,确保同一时间只有一个线程可以对其进行修改。这种方法需要手动管理同步,比较繁琐。ArrayList list = new ArrayList<>();
synchronized (list) {
for (Integer element : list) {
// 对元素进行操作
if (condition) {
list.remove(element);
}
}
}
以上是几种常见的解决ArrayList上的ConcurrentModificationException异常的方法。根据具体的需求和场景选择合适的方法。