数组与ARRAYLIST的关系与区别

一、数组与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的转换
1.ArrayList转换为数组:
int size=list.size();
String[] array = (String[])list.toArray(new String[size]);
2.数组转换为ArrayList
List list=Arrays.asList(array); —用list而非arraylist
也可以创建固定长度的列表,如下,将刚刚那个数组具体化出来:
List list = Arrays.asList(“王利虎”,”张三”,”李四”);

三、其他
1.数组和ArrayList都表示可以存一组同类型的对象;都使用下标定位和查找元素;
2.数组的定义:
int[] num=new int[10];
int n = num[i];
3.ArrayList的使用:
List lst=new ArrayList();
lst.add(employee);
lst.get(position);

你可能感兴趣的:(ArrayList)