ArrayList的问题(迭代的时候不允许修改)
来源:互联网 发布:淘宝装被子袋子 编辑:程序博客网 时间:2024/05/16 12:24
下面是我今天回答帖子中最尴尬的一个,
问题:请直接看下面第一段代码的注释处
下面两段代码主要是说明通过内部类来实现,多重继承的功能,通过内部类来继承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的问题,迭代的时候不允许修改. 结贴.
我太自卑了,呵呵,现在会了,以后就知道了!
- ArrayList的问题(迭代的时候不允许修改)
- ArrayList的迭代删除问题
- ArrayList迭代的两种方法
- 数据库:在修改表结构的时候提示不允许保存更改的解决方法
- 如何解决SQL Server2008不允许保存修改的问题
- 解决sql server不允许保存表结构修改的问题
- 集合迭代时候操作解决方案-ArrayList-Iterator-CopyOnWriteArrayList
- 整数的拆分问题(不允许重复)
- 迭代Iterator结合ArrayList集合的使用及基本使用,再看迭代Iterator原理
- 锁定明细表格的某一行数据(不允许修改)
- 在迭代一个集合的时候,如何避免ConcurrentModificationException
- 解决SQL Server2008表结构修改后不允许保存的问题
- 修改ArrayList里面的内容
- 关于ArrayList的问题
- arrayList 的访问问题
- ArrayList 赋值的问题
- java ArrayList的问题
- 用const_reverse_iterator迭代的问题
- .net类库中发送电子邮件的方法总结
- 世界级顶尖商业巨富分享毕生的智慧
- Unbuntu下安装SiS 191网卡简记
- jsp 配置
- 在asp.net中备份还原SQL Server数据库
- ArrayList的问题(迭代的时候不允许修改)
- Head First C#中文版 图文皆译 (page20)
- 感谢所有的人
- Tomcat下JSP、Servlet和JavaBean环境的配置和应用建立
- Sockstress:新而有效的DoS(拒绝服务)攻击
- 文件(夹)复制、删除、重命名
- Sandy引擎学习笔记:swf影片剪辑纹理贴图
- DataSetHelper——操作DataSet的工具类
- 是什么限制了我的发展(转)