我有这段代码,我使用迭代器遍历ArrayList,如:
Iterator iterator = list.iterator();
while (iterator.hasNext()) {
Element element = iterator.next();
iterator.remove();
handle(element)
}
其中'handle(元素元素)`如下:
ListIterator iterator = list.listiterator();
iterator.add(element);
现在这给出了ConcurrentModificationException,因为第一个方法中的iterator
没有使用新添加的元素进行更新。
我目前使用CopyOnWriteArrayList解决了这个问题,但这些对于性能来说非常昂贵。有没有更好的方法来解决这个问题?
提前致谢!
(注意:这个例子没有任何意义,但是用来说明我面对的是什么)
我会试着解释为什么我这样做:
我的主要课程中有一个需要执行的“命令”列表
我有一个while循环(示例中的代码1),它迭代这些命令并逐个执行,同时从列表中执行时删除它们。
执行命令时,此命令可以依次向我的主类中保存的列表添加新命令。 (这实际上有点复杂:处理命令要求来自客户端的响应,而客户端的响应将响应命令,并且会将其添加到保存的列表中。 < / p>
答案 0 :(得分:5)
根据规定的要求,简单的解决方案是使用PwCheck()
(javadoc)而不是Queue
。
我的主类中有一个需要执行的'命令'列表
List
可以代表一系列命令。
我有一个while循环(示例中的代码1)迭代这些命令并逐个执行它们,同时从列表中执行时删除它们。
Queue
的等效内容是重复调用Queue
或remove()
等来获取和删除poll()
中的第一个命令。重复执行此操作,直到Queue
为空。
请注意,这不涉及Queue
。
执行命令时,此命令可以依次向我的主类中保存的列表添加新命令。
可以通过调用Iterator
或add()
向offer()
添加命令来完成。
请注意,Queue
有许多不同的实现,具有不同的属性: