黑马程序员技术交流社区
标题:
关于交通灯管理系统Road的代码问题
[打印本页]
作者:
姜胜凯
时间:
2014-1-12 19:37
标题:
关于交通灯管理系统Road的代码问题
本帖最后由 姜胜凯 于 2014-1-12 19:41 编辑
package com.itheima.traffic;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class Road {
private List<String> cars = new ArrayList<String>();
private String name=null;
public Road(String name){
this.name=name;
ExecutorService pool=Executors.newSingleThreadExecutor();
pool.execute(new Runnable(){
public void run(){
for(int x=1;x<500;x++){
try {
Thread.sleep((new Random().nextInt(10)+1)*1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
cars.add(Road.this.name+"_第"+x+"汽车");
// System.out.println(Road.this.name+"_第"+x+"汽车");
}
}
});
ScheduledExecutorService timer =Executors.newScheduledThreadPool(1);
timer.scheduleAtFixedRate(new Runnable(){
public void run(){
**** if(cars.size()>0){
boolean lamp2green=Lamp.valueOf(Road.this.name).isGreen();
if(lamp2green)
System.out.println(cars.remove(0)+"开过去了");
}
}
},
1,
1,
TimeUnit.SECONDS);
}
}
****处用于判断路上是否有车的语句是否可以换成(cars!=null)。
集合cars (cars!=null)和(cars>0)的区别~
换上就会出错,求高手解答下为什么。
作者:
王磊
时间:
2014-1-16 13:47
cars != null 并不代表其指向集合中一定包含元素.当cars直接初始化并且没有add元素进去,则执行到cars.remove(0)会报空指针.
cars.size()是实例调用方法,来判断集合中是否有元素,只有元素个数大于0,才能执行remove(0).
两者概念不同.
作者:
还记得梦想吗
时间:
2014-1-16 16:30
我的这里运行并没有出错,可能是因为集合里面一直有对象吧!集合对象为null时并不指向任何对象。而.size()则是指集合里面的对象的个数变成了0
作者:
姜胜凯
时间:
2014-1-21 12:56
王磊 发表于 2014-1-16 13:47
cars != null 并不代表其指向集合中一定包含元素.当cars直接初始化并且没有add元素进去,则执行到cars.remov ...
谢谢了。。受教~~~
作者:
宋星
时间:
2014-1-21 20:53
/*
验证:集合!=null和集合.size()!=0,是否是相同的意思。
结论:集合!=null和集合.size()!=0不是一个意思。集合!=null,只是说明这个集合对象已经存在,
但并不等于说集合.size()==0,因为这个集合中可能没有装元素。null是对于这个集合是否存在讲的,
size()==0是对于集合里面的是否有元素讲的。
也就是说集合!=null,但集合.size()可以==0。
*/
import java.util.*;
class TestNullAndSize
{
public static void main(String[] args)
{
List<String> list1=null;
List<String> list2=new ArrayList<String>();
if(list1==null)
{
System.out.println("null异常");
//打印出来了,说明list1 这个对象都不存在,还没创建出来,所以集合list1为null
}
if(list2==null)
{
System.out.println("集合为null");
// 没打印出来,说明list2这个对象存在,所以集合list2不为null
}
if(list2!=null&&list2.size()==0)
{
System.out.println("集合中没有元素,但集合不是null");
//打印出来了,说明list2不为null,只是集合里没有元素,长度为0。再结合上面的,说明list2!=null和list2.size()!=0不是一回事。
}
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2