您的位置:首页 > 其它

ArrayList与LinkedList的区别

2017-04-19 11:53 218 查看

一.ArrayList

ArrayList是List接口的可变数组的实现。实现了所有可选列表操作,并允许包括 null 在内的所有元素。

它实现List接口、底层使用数组保存所有元素。其操作基本上是对数组的操作。

二.LinkedList

LinkedList是一个双向链表。它也可以被当作堆栈、队列或双端队列进行操作。LinkedList随机访问效率低,但随机插入、随机删除效率低。

三.ArrayList与LinkedList的区别

从上面我们可以看出这两者之间在用法上并没有什么区别,底层实现无非就是一个数组一个链表了,但是它们在功能上有很大区别,这取决于它们之间的效率

下面我们可以来证明一下ArrayList和LinkedList在增删操作和查询操作上的效率差距

public abstract class ListTemp {

public abstract void Add();
public abstract void Select();
public  long Gettime() {
return System.currentTimeMillis();
}

}

public class ListDemo extends ListTemp{

private  List<Integer> arraylist;

private  List<Integer> linkedlist;

@Override
public  void Add() {
long arraystart=Gettime();
for(int i=0;i<100000;i++) {
arraylist.add(0,i);
}
long arrayend=Gettime();
System.out.println("ArrayList添加所用时:"+(arrayend-arraystart));

System.out.println("***********************************");

long linkedstart=Gettime();
for(int i=0;i<100000;i++) {
linkedlist.add(0,i);
}
long linkedend=Gettime();
System.out.println("LinkedList添加所用时:"+(linkedend-linkedstart));
}

@Override
public void Select() {
long arraystart=Gettime();
for(int k=0;k<arraylist.size();k++) {
if(arraylist.get(k)==1) {
break;
}
}
long arrayend=Gettime();
System.out.println("ArrayList删除所用时:"+(arrayend-arraystart));

System.out.println("***********************************");
long linkedstart=Gettime();
for(int k=0;k<linkedlist.size();k++) {
if(linkedlist.get(k)==1) {
break;
}
}
long linkedend=Gettime();
System.out.println("LinkedList删除所用时:"+(linkedend-linkedstart));
}

@Test
public void Test() {
arraylist=new ArrayList<Integer>();
linkedlist=new LinkedList<Integer>();
Add();
System.out.println();
Select();
}

}


打印结果:

ArrayList添加所用时:2752
***********************************
LinkedList添加所用时:16

ArrayList删除所用时:26
***********************************
LinkedList删除所用时:21768


所以对于LinkedList经常用在增删操作较多而查询操作很少的情况下,而ArrayList则相反,经常用在查询操作较多而增删操作较少的情况下

END!!!!!!!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: