Java基础教程35-LinkedList和ArrayListed的区别

来源:互联网 发布:骰子软件 编辑:程序博客网 时间:2024/06/04 01:27

       前面分别介绍了ArrayList和LinkedList,那么这两个有什么区别呢。特别是两者在操作性能这块,经常在面试中被问到。我也从网上拷贝了几条不同点过来:

1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 

2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。

3.对于随机新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

注意这里红色字体随机标出来,看完下面例子,你就明白为什么这里要标随机新增操作。

package lesson01;import java.util.ArrayList;import java.util.LinkedList;public class MyClass {public static void main(String[] args){long n = (long)1E6;ArrayList arrayList = new ArrayList();long milis = System.currentTimeMillis();for(int i= 0; i<n; i++){arrayList.add(i);}System.out.println("新增操作arraylist 花费了  "+(System.currentTimeMillis()-milis) +" 毫秒");LinkedList linkedList = new LinkedList();milis = System.currentTimeMillis();for(int i= 0; i<n; i++){linkedList.add(i);}System.out.println("新增操作linkedlist 花费了  "+(System.currentTimeMillis()-milis) +" 毫秒");// arraylist删除元素milis = System.currentTimeMillis();arrayList.remove(1E5);System.out.println("删除元素arraylist 花费了  "+(System.currentTimeMillis()-milis) +" 毫秒");// linkedlist删除元素milis = System.currentTimeMillis();linkedList.remove(1E5);System.out.println("删除元素linkedlist 花费了  "+(System.currentTimeMillis()-milis) +" 毫秒");// arraylist get 中间元素milis = System.currentTimeMillis();arrayList.get((int)n/2);System.out.println("访问中间元素arraylist 花费了  "+(System.currentTimeMillis()-milis) +" 毫秒");// linkedlist get 中间元素milis = System.currentTimeMillis();linkedList.get((int)n/2);System.out.println("访问中间元素linkedlist 花费了  "+(System.currentTimeMillis()-milis) +" 毫秒");}}
运行结果

新增操作arraylist 花费了  345 毫秒新增操作linkedlist 花费了  6545 毫秒删除元素arraylist 花费了  26 毫秒删除元素linkedlist 花费了  80 毫秒访问中间元素arraylist 花费了  0 毫秒访问中间元素linkedlist 花费了  144 毫秒
      会不会发现,在新增操作,LinkedList花费时间比ArrayList要多很多,不是说新增操作,LinkedList要更快吗。所以,前面标准红色字体随机新增操作是前提,上面例子中,我们在linkedList是做从尾部顺序的新增操作,而不是随机新增,由于linkedList要移动指针,所以这里打印出来的时间要比arraylist要多。

阅读全文
0 0
原创粉丝点击