Java中LinkedList使用Iterator遍历的问题
类Controller:importjava.util.*;publicclassController{privateLinkedList<Event>eventList...
类Controller:
import java.util.*;
public class Controller {
private LinkedList<Event> eventList = new LinkedList<Event>();
public void addEvent(Event c) { eventList.add(c); }
public void run() {
LinkedList<Event> eventListCopy =
new LinkedList<Event>(eventList);
ListIterator<Event> it
= eventListCopy.listIterator();
while(it.hasNext()) {
it.next().action(); //action()函数会调用addEvent()函数添加元素
it.previous();
System.out.println(it.next().description()); //输出状态
}
}
}
主函数:
public static void main(String[] args) {
GreenhouseControls gc =
new GreenhouseControls();
long tm = System.currentTimeMillis();
gc.addEvent(gc.new Restart(tm));
gc.run();
}
=====================================================
action()函数利用addEvent()添加一系列元素
但是在while()中却只能输出第一个元素,为什么?
=====================================================
参考资料:《Thinking in Java 4th》(中文版) 第11章 练习13
程序很长,仅贴一部分:
private class Restart extends Event { //Event是一个抽象类
public Restart(long eventTime) {
super(eventTime);
}
public void action() {
long tm = System.currentTimeMillis();
rings = 5;
addEvent(new ThermostatNight(tm)); //这里所添加的ThermostatNight等结构都与Restart类相似,都有一个action方法(只有Restart类中有addEvent() )和description方法(作为状态输出)
addEvent(new LightOn(tm + 1000));
addEvent(new LightOff(tm + 2000));
addEvent(new WaterOn(tm + 3000));
addEvent(new WaterOff(tm + 8000));
addEvent(new Bell(tm + 9000));
addEvent(new ThermostatDay(tm + 10000));
// Can even add a Restart object!
addEvent(new Restart(tm + 20000));
}
public String description() {
return "Restarting system";
}
} 展开
import java.util.*;
public class Controller {
private LinkedList<Event> eventList = new LinkedList<Event>();
public void addEvent(Event c) { eventList.add(c); }
public void run() {
LinkedList<Event> eventListCopy =
new LinkedList<Event>(eventList);
ListIterator<Event> it
= eventListCopy.listIterator();
while(it.hasNext()) {
it.next().action(); //action()函数会调用addEvent()函数添加元素
it.previous();
System.out.println(it.next().description()); //输出状态
}
}
}
主函数:
public static void main(String[] args) {
GreenhouseControls gc =
new GreenhouseControls();
long tm = System.currentTimeMillis();
gc.addEvent(gc.new Restart(tm));
gc.run();
}
=====================================================
action()函数利用addEvent()添加一系列元素
但是在while()中却只能输出第一个元素,为什么?
=====================================================
参考资料:《Thinking in Java 4th》(中文版) 第11章 练习13
程序很长,仅贴一部分:
private class Restart extends Event { //Event是一个抽象类
public Restart(long eventTime) {
super(eventTime);
}
public void action() {
long tm = System.currentTimeMillis();
rings = 5;
addEvent(new ThermostatNight(tm)); //这里所添加的ThermostatNight等结构都与Restart类相似,都有一个action方法(只有Restart类中有addEvent() )和description方法(作为状态输出)
addEvent(new LightOn(tm + 1000));
addEvent(new LightOff(tm + 2000));
addEvent(new WaterOn(tm + 3000));
addEvent(new WaterOff(tm + 8000));
addEvent(new Bell(tm + 9000));
addEvent(new ThermostatDay(tm + 10000));
// Can even add a Restart object!
addEvent(new Restart(tm + 20000));
}
public String description() {
return "Restarting system";
}
} 展开
3个回答
展开全部
next() 返回列表中的下一个元素
previous() 返回列表中的前一个元素。
next()后到第一个元素了,你再previous()又到起点了,总是第一个元素徘徊啊
previous() 返回列表中的前一个元素。
next()后到第一个元素了,你再previous()又到起点了,总是第一个元素徘徊啊
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你通过action()函数利用addEvent()添加元素,是在异步的情况下进行的,异步问题必定要考虑先后问题,而且异步问题不保证其他线程的修改能够立即体现(否则也不会出现Object.wait()方法了)如果你需要在迭代的过程中添加元素,就必须保证迭代器能够在迭代的过程中修改容器,此时你必须使用迭代器的添加方法,此处应为it.add()进行容器添加
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询