黑马程序员技术交流社区
标题:
交通线路疑问
[打印本页]
作者:
请备注
时间:
2014-4-5 18:47
标题:
交通线路疑问
class Road
{
private List<String> vechicles = new ArrayList<String>();
// 这里为什么是用List而不是其它集合,后面怎么又变成ArrayList了?这样有什么 好处吗?
private String name = null;
public Road(String name)
{
this.name = name;
ExceutorServer pool = Executors.newSingleThreadExecutor();
pool.execute(new Runnable()//这里线程的创建既不是实现实现Runnable,也不是继承Thread,这
// 是新的创建方式吗?用继承和实现不能解决问题吗?
{
public void run()
{
for(int i=1;i<1000;i++)
{
try
{
Thread.sleep((new Random().nextInt(10)+1)*1000);
}
catch(InterruptedException e)
{
e.printStackTrace();
}
vechicles.add(Road.this.name+"_"+i);
}
}
});
作者:
zhangbingyuan
时间:
2014-4-5 19:07
关于list集合的疑问,这里主要是多态+泛型,因为ArrayList是List的子类,所以可以用父类引用指向子类对象,这其实也是多态的本质。当然这里你也可以写作:ArrayList<String> vechicle = new ArrayList<String>(); 都行的。我认为这里使用LinkedList集合会更好,因为程序中只涉及到了增删操作,使用LinkedList集合会更加高效。
至于后边的线程创建问题,程序中这种线程创建方法是应用了新技术而已。用咱们学过的继承Thread类或者实现Runnable接口的方法都行的。
作者:
xuehuayous
时间:
2014-4-5 19:24
问题一:
private List<String> vechicles = new ArrayList<String>();
// 这里为什么是用List而不是其它集合,后面怎么又变成ArrayList了?这样有什么 好处吗?
使用什么集合要看需求,
List:有序(元素存入集合的顺序和取出的顺序一致),元素都有索引。元素可以重复。
|--ArrayList:底层的数据结构是数组,线程不同步,ArrayList替代了Vector,查询元素的速度非常快。
|--LinkedList:底层的数据结构是链表,线程不同步,增删元素的速度非常快。
|--Vector:底层的数据结构就是数组,线程同步的,Vector无论查询和增删都巨慢。
Set接口中的方法和Collection中方法一致的。Set接口取出方式只有一种,迭代器。
|--HashSet:底层数据结构是哈希表,线程是不同步的。无序,高效;
|--LinkedHashSet:有序,hashset的子类。
|--TreeSet:对Set集合中的元素的进行指定顺序的排序。不同步。TreeSet底层的数据结构就是二叉树。
问题二:
pool.execute(new Runnable()//这里线程的创建既不是实现实现Runnable,也不是继承Thread,这
// 是新的创建方式吗?用继承和实现不能解决问题吗?
这是新技术中提供的线程池的概念,方便了程序的书写,提高了效率,其实内部还是实现的Runnable()接口。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2