今天在操作Arraylist的时候需要对其中的一个对象进行删除,然后我就foreach进行遍历,然后得到这个实体,通过list.remove()进行删除,但是测试的时候发现抛异常了,然后网上查找资料发现原来是是由于 调用list.remove()方法导致modCount和expectedModCount的值不一致。 所以需要解决这个有两种方式,1)在使用iterator迭代的时候使用synchronized或者Lock进行同
步; 或者通过使用使用并发容器CopyOnWriteArrayList代替ArrayList和Vector。
由于第一种虽然能达到效果,但是由于加了synchronized和lock使得程序效率下降,并且还会抛出异常,所以推荐使用CopyONWriteArrayLIist,
使用方法如下:
//首先创建两个list集合
List<Agent> agentList2 = new ArrayList<Agent>();
CopyOnWriteArrayList<Agent> agentList3 = new CopyOnWriteArrayList<Agent>();
//然后在这里将普通的Arraylist集合放入到CopyOnWriteArrayLIst中
agentList3.addAll(agentList2);
//此时在遍历的时候进行移除就不会报错了
for (Agent an : agentList3){
if ("127.0.0.1".equals(an.getIp())){
agentList3.remove(an);
continue;
}
}