ArrayList与LinkedList的区别,linkedlist
分享于 点击 40704 次 点评:166
ArrayList与LinkedList的区别,linkedlist
一.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!!!!!!!!!
相关文章
- 暂无相关文章
用户点评