java.util.ConcurrentModificationException错误的原因及解决方法

来源:互联网 发布:淘宝北京天时恒生假表 编辑:程序博客网 时间:2024/05/02 01:28

母牛生小牛的题。

传统做法是斐波那契数列的做法,直接递归就可以。

这里想到之前做过用java面向对象的方法来做,结果iterator遍历list的时候遇到一个问题:java.util.ConcurrentModificationException


后来找到原因:定义两个类:farm,cow,其中farm中有cows的列表,每次生小牛直接farm.add(),cows中添加一个,但是没注意到我是在遍历cows时判断是否生小牛,生就添加,不生就下一个母牛。所以,如果有修改的话,修改后的cows与我正在遍历的cows产生不一致,导致“当前修改错误”。

 

改进方法:产生小牛和遍历cows不放在一起,即不用iterator进行遍历,直接用forcowssize进行遍历,每个生小牛的过程放在cow类中实现,让他自己growup,farm类只管对其中的所有小牛的每年进行监管,只遍历cows数组而已!不方便之处就在,两个类中的方法来回调用,首先farm中的produce遍历cows,调用cow中的growup方法,growup判断了会生小牛又要调用farm中的add方法做添加。因为produce中,size一开始就确定了cows.size(),所以,size一年一变,不影响产生小牛的过程。iterator不好就在于其只能hasNext()相当于动态的判断size,所以这个地方不好用。
 

代码与上次做的基本一样,直接看连接就可以:http://blog.csdn.net/gwj879/article/details/6854306