ArrayList的问题:迭代的时候不允许修改来源: 发布时间:星期四, 2008年10月16日 浏览:2次 评论:0
问题:请直接看下面第一段代码的注释处
下面两段代码主要是说明通过内部类来实现,多重继承的功能,通过内部类来继承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的问题,迭代的时候不允许修改. 结贴.我太自卑了,呵呵,现在会了,以后就知道了! 0
相关文章读者评论
发表评论 |