ArrayList的问题(迭代的时候不允许修改)

下面是我今天回答帖子中最尴尬的一个,

 

问题:请直接看下面第一段代码的注释处
下面两段代码主要是说明通过内部类来实现,多重继承的功能,通过内部类来继承Event类,然后外部类继承Controller类,将继承了Event的内部类对象放到eventList中,来调用。

Java code
   
   
package controller; import java.util. * ; public class Controller { private List < Event > eventList = new ArrayList < Event > (); public void addEvent(Event c){ eventList.add(c); } public void run(){ while (eventList.size() > 0 ){ // for(Event e : eventList){ // 如果是直接用,则会出错。 for (Event e : new ArrayList < Event > (eventList)){ // 为什么这里要再新建一个new ArrayList<Event>(eventList)? if (e.ready()){ System.out.println(e); e.action(); eventList.remove(e); } } } } }

Java code
   
   
package controller; public abstract class Event { private long eventTime; protected final long delayTime; public Event( long delayTime){ this .delayTime = delayTime; } public void start(){ eventTime = System.nanoTime() + delayTime; } public boolean ready(){ return System.nanoTime() >= eventTime; } public abstract void action(); }
我一直以为:
//for(Event e : eventList){  //如果是直接用,则会出错。 
for(Event e : new ArrayList <Event>(eventList)){
//为什么这里要再新建一个new ArrayList <Event>(eventList)?

为什么会出现这样的错误呢,其实原因是楼主没有理解透for循环中创建的均为临时变量,
如:这里在for 循环中Event e,其实是创建的临时对象,它的生命周期只是在这个for循环之内,
当for循环结束时,就会自动销毁了,所以需要建立一个new ArrayList <Event>(eventList)临时对象来实现循环,
不然就会出现上述情况。
后来企鹅老兄说:ArrayList的问题,迭代的时候不允许修改. 结贴.
我太自卑了,呵呵,现在会了,以后就知道了!
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值