参考:http://www.cnblogs.com/a164266729/p/4561651.html
(1)ArrayList是Array的复杂版本
ArrayList内部封装了一个Object类型的数组,从一般的意义来说,它和数组没有本质的差别,甚至于ArrayList的许多方法,如Index、IndexOf、Contains、Sort等都是在内部数组的基础上直接调用Array的对应方法。
(2)存储的数据类型
ArrayList可以存储异构对象,而Array只能存储相同数据类型的数据。
(3)长度的可变
Array的长度实际上是不可变的,二维变长数组实际上的长度也是固定的,可变的只是其中元素的长度。而ArrayList的长度既可以指定(即使指定了长度,也会自动2倍扩容)也可以不指定,是变长的。
(4)存取和增删元素
对于一般的引用类型来说,这部分的影响不是很大,但是对于值类型来说,往ArrayList里面添加和修改元素,都会引起装箱和拆箱的操作,频繁的操作可能会影响一部分效率。另外,ArrayList是动态数组,它不包括通过Key或者Value快速访问的算法,所以实际上调用IndexOf、Contains等方法是执行的简单的循环来查找元素,所以频繁的调用此类方法并不比你自己写循环并且稍作优化来的快,如果有这方面的要求,建议使用Hashtable或SortedList等键值对的集合。
好了,关于这两个数据结构的对比我们就到这里,如果有觉得不妥的地方,欢迎大家指正。
附Array和ArrayList的相互转换:
public class Test { public static void main(String[] args) { List<String> list=new ArrayList<String>(); list.add("王利虎"); list.add("张三"); list.add("李四"); int size=list.size(); String[] array = (String[])list.toArray(new String[size]); for(int i=0;i<array.length;i++){ System.out.println(array[i]); } } }
package test.test1; import java.util.Arrays; import java.util.List; public class Test { public static void main(String[] args) { String[] array=new String[3]; array[0]="王利虎"; array[1]="张三"; array[2]="李四"; List<String> list=Arrays.asList(array); for(int i=0;i<list.size();i++){ System.out.println(list.get(i)); } } }