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