标签:java 基础 arraylist linkedlist
首先亮一下他们两个基本区别,面试的时候可以用来和面试官唠嗑啊
1、ArrayList实现了基本动态数组结构,Linked基于链表的结构。链表?什么是链表?答:“链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中指针连接次序实现的”注:此句话通过了科普中国百科科学词条编写与应用工作项目的审核。
2、对于get和set,ArrayList的性能优于LinkedList,因为Linked要移动指针,麻烦的很
3、对于add和remove,LinkedList要优于ArrayList,因为链表就擅长这个,ArrayList还要移动数据
LinkedList和ArrayList是两个集合类,用于存储一系列的对象引用(references)。例如我们用ArrayList来存储一系列String或者Integer。那么ArrayList和LinkedList在性能上有什么差别?
假如我们有一个很大的列表,里面的元素已经排好序,我们对这个列进行二分查找(binary search),比较两种List的速度,源码如下:
public class TestList {
public static final int N = 50000;
public static List<Integer> values;
static{
Integer vals[] = new Integer[N];
Random random = new Random();
for(int i=0,currval=0;i<N;i++){
vals[i] = new Integer(currval);
currval += random.nextInt(100)+1;
}
values = Arrays.asList(vals);
}
static long timeList(List<Integer> lst){
long start = System.currentTimeMillis();
for(int i=0;i<N;i++){
int index = Collections.binarySearch(lst, values.get(i));
if(index != i){
System.out.println("error occoured ");
}
}
return System.currentTimeMillis() - start;
}
public static void main(String[] args){
System.out.println("ArrayList的耗时:"+timeList(new ArrayList<Integer>(values)));
System.out.println("LinkedList的耗时:"+timeList(new LinkedList<Integer>(values)));
}
}
ArrayList的耗时:12
LinkedList的耗时:5346
很明显,ArrayList的时间明显小于LinkedList。二分法查找使用的是随机访问策略,而LinkedList是不支持快速随机访问的。
下面再看一个对List进行大量增加和删除的例子:
public class ListDemo {
public static final int N = 50000;
static long timeList(List<Object> list){
long start = System.currentTimeMillis();
Object o = new Object();
for(int i=0;i<N;i++){
list.add(o);
}
return System.currentTimeMillis() - start;
}
public static void main(String[] args) {
System.out.println("ArrayList的耗时:"+timeList(new ArrayList<Object>()));
System.out.println("LinkedList的耗时:"+timeList(new LinkedList<Object>()));
}
}
ArrayList的耗时:5
LinkedList的耗时:4
结果是出乎我的意料之外的,我把N分别设置为了5000、500000他们的耗时都非常接近,看来理论知识与现实情况还有有一定的差距。当我将N增到至500W的时候LinkedList的耗时竟然超过了ArrayList。希望看到我的文章的知道真相的大神们可以给我讲解下,谢谢。
标签:java 基础 arraylist linkedlist
原文地址:http://blog.csdn.net/fuyuwei2015/article/details/45821063