查看array和arraylist的源码发现arraylist是在array的基础上扩展过来的,在arraylist的add等操作方法中使用的长度判断和增加长度后拷贝原array的处理方法。这就严重影响力arraylist的速度。所以在使用有固定长度的对象的时候一般使用array来提高速度。
下面是百度上找到一些相关的知识点:
一、数组与ArrayList的主要区别:效率、类型识别和primitive type。
数组([]):最高效;但是其容量固定且无法动态改变;
ArrayList:容量可动态增长;但牺牲效率;
建议:
首先使用数组,无法确定数组大小时才使用ArrayList!
1.效率:
数组扩容是对ArrayList效率影响比较大的一个因素。
每当执行Add、AddRange、Insert、InsertRange等添加元素的方法,都会检查内部数组的容量是否不够了,如果是,它就会以当前容量的两倍来重新构建一个数组,将旧元素Copy到新数组中,然后丢弃旧数组,
在这个临界点的扩容操作,应该来说是比较影响效率的。
ArrayList是Array的复杂版本
ArrayList内部封装了一个Object类型的数组,从一般的意义来说,它和数组没有本质的差别,甚至于
ArrayList的许多方法,如Index、IndexOf、Contains、Sort等都是在内部数组的基础上直接调用Array的对应方法。
2.类型识别:
ArrayList存入对象时,抛弃类型信息,所有对象屏蔽为Object,编译时不检查类型,但是运行时会报错。
注:jdk5中加入了对泛型的支持,已经可以在使用ArrayList时进行类型检查。
从这一点上看来,ArrayList与数组的区别主要就是由于动态增容的效率问题了
3.ArrayList可以存任何Object,如String,Employee等,但不支持基本数据类型,除非使用wrapper。
二、数组与ArrayList的转换(有待补充:见《corejava》110页)
1.ArrayList转换为数组:
ArrayList转换String[]
ArrayList list = new ArrayList();list.add("a");list.add("b");list.add
("c");System.out.println("a="+list);String[] b=(String[])list.toArray
(new String[0]);
2.数组转换为ArrayList(有待补充)
三、Arrays类操纵java中的数组(有待补充)
http://java.ccidnet.com/art/3737/20060627/589715_1.html
四、实现DecisionTree时对ArrayList与String[]的迷惑与解铃(有待补充)
http://www.mysdn.cn/Java/J2SEjichulei/20060914/9172.html
(实际为数组与ArrayList的迷惑)
五、其他
1.数组和ArrayList都表示可以存一组同类型的对象;都使用下标定位和查找元素;
2.数组的定义:
int[] num=new int[10];
Employee[] staff=new Employee[100];
3.ArrayList的使用:
List lst=new ArrayList();
lst.add(employee);
4.起初并没有Arrays类(??不记得在哪看到了,不确定),Arrays类是为了方便数组的一些常用的共同
操作而实现的。
5.ArrayList详解:
http://my.opera.com/wujianrong/blog/index.dml/tag/ArrayList
http://blog.csdn.net/realasker/
6.J2SE 5.0中的泛型
http://www.javanb.com/j2se/1/5246.html