ArrayList和LinkedList这两个都是List接口的实现类,两者都符合List接口特征允许存储重复元素,逻辑上是有序的,允许通过索引随机访问,但两者还是有区别:
对于存储空间上是实现了基于数组的数据结构, 数据元素保存在连继分配的内存,占用空间较小,基于的数据结构,除了保存数据本身之外,还需要保存每个数据元素的前继和后继元素引用。占用内存空间较大。
对于随机访问get和set,ArrayList性能上优于LinkedList,因为LinkedList要从表头开始搜索。
对于添加和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
示例程序演示向两类列表对象中插入一条记录,性能上差别。
示例代码: public class Test { public static void main(String[] args) { List<String> aList=new ArrayList<String>(); for(int i=0;i<1000000;i++){ //向aList中添加1000个字符串 aList.add(i+""); } List<String> bList=new LinkedList<String>(); for(int i=0;i<1000000;i++){ //向bListList中添加1000个字符串 bList.add(i+""); } long begin=System.currentTimeMillis(); aList.add(100,"List"); long end=System.currentTimeMillis(); System.out.println("ArrayList添加操作耗时:"+(end-begin)); begin=System.currentTimeMillis(); bList.add(100,"List"); end=System.currentTimeMillis(); System.out.println("LinkedList添加操作耗时:"+(end-begin)); } } | | |
运行程序,结果如下:
ArrayList添加操作耗时:2 LinkedList添加操作耗时:0 | |