关于数组和arraylist的随笔

查看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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值