ArrayList、LinkedList和Vector区别
2017-11-04 17:00
381 查看
最近刷面试题,做个随笔。。。查资料看见下面这图不错就偷来了。
Vector和ArrayList底层都是Object[]存储的动态数组,LinkedList是基于链表的数据结构
Vector的方法都是同步的(Synchronized),而ArrayList的方法不是,因此,ArrayList的性能比Vector好
当Vector或ArrayList中的元素超过它的初始大小时,Vector会将它的容量翻倍,而ArrayList只增加50%的大小,这样,ArrayList就有利于节约内存空间
LinkedList适合增删,ArrayList和Vector适合尾部增加和查询
这道题目我想到三种方法:
准备一个ArrayList
总结:
三者时间比较3<2<1,分别是10,20,1800,经过多次测试都在这三个数字上下跳动,吊还是linkedlist吊啊。
一、区别
如图,三个实现了Java.util.List接口。Vector和ArrayList底层都是Object[]存储的动态数组,LinkedList是基于链表的数据结构
Vector的方法都是同步的(Synchronized),而ArrayList的方法不是,因此,ArrayList的性能比Vector好
当Vector或ArrayList中的元素超过它的初始大小时,Vector会将它的容量翻倍,而ArrayList只增加50%的大小,这样,ArrayList就有利于节约内存空间
LinkedList适合增删,ArrayList和Vector适合尾部增加和查询
二、面试题:去除[1,100000]之间的偶数
ArrayList在删除或添加其中的一个数据的时候,会创建一个新的ArrayList,把原来的list切开,再在新的list中拼接上,所以巨耗时,之前看到过图片,但找不到了。。。。这道题目我想到三种方法:
准备一个ArrayList
public static ArrayList<Integer> preList(){ ArrayList<Integer> arrayList=new ArrayList<>(100001); for(int i=1;i<100001;i++){ arrayList.add(new Integer(i)); } return arrayList; }
1.ArrayList+迭代器+if+remove
public static void arrayRemove(){ ArrayList<Integer> arrayList=preList(); Long start=System.currentTimeMillis(); Iterator<Integer> iterator=arrayList.iterator(); while(iterator.hasNext()){ Integer i=iterator.next(); if(i%2==0){ iterator.remove(); } } Long end=System.currentTimeMillis(); System.out.println("普通删除消耗时间"+(end-start)); }
2.ArrayList*2+迭代器+if+add
public static void arrayAdd(){ ArrayList<Integer> arrayList1=new ArrayList<>(); List<Integer> arrayList=preList(); Long start=System.currentTimeMillis(); Iterator<Integer> iterator=arrayList.iterator(); while(iterator.hasNext()){ Integer i=iterator.next(); if(i%2!=0){ arrayList1.add(new Integer(i)); } } Long end=System.currentTimeMillis(); System.out.println("第二种方法时间"+(end-start)); }
3.LinkedList
public static void linkedremove(){ LinkedList<Integer> linkedList=new LinkedList<>(); for(int i=1;i<100001;i++){ linkedList.add(new Integer(i)); } Long start=System.currentTimeMillis(); Iterator<Integer> iterator=linkedList.iterator(); while(iterator.hasNext()){ Integer i=iterator.next(); if(i%2==0){ iterator.remove(); } } Long end=System.currentTimeMillis(); System.out.println("linked删除消耗时间"+(end-start)); }
总结:
三者时间比较3<2<1,分别是10,20,1800,经过多次测试都在这三个数字上下跳动,吊还是linkedlist吊啊。
相关文章推荐
- ArrayList、LinkedList和Vector三兄弟的区别
- ArrayList,LinkedList以及Vector的区别?
- Vector Arraylist LinkedList 区别
- HashMap、HashTable、ArrayList、LinkedList、Vector的区别
- (转)ArrayList Vector LinkedList 区别与用法
- Vector,ArrayList,LinkedList 的区别是什么?
- Vector,ArrayList,LinkedList区别
- java中ArrayList、LinkedList和Vector的区别
- java中Vector跟ArrayList、LinkedList之间的区别
- List、Map、Set的理解(LinkedList和ArrayList、Vector和ArrayList、HashMap和HashTable和HashSet区别与使用)
- ArrayList LinkedList Vector的联系与区别
- ArrayList、LinkedList、Vector的区别。
- 集合中list、ArrayList、LinkedList、Vector的区别、Collection接口的共性方法以及数据结构的总结
- 【转】ARRAYLIST VECTOR LINKEDLIST 区别与用法
- ARRAYLIST VECTOR LINKEDLIST 区别与用法
- Java容器类List、ArrayList、Vector及map、HashTable、HashMap、TreeMap、LinkedHashap的区别与用法
- Vector & ArrayList 、Hashtable & HashMap 、ArrayList & LinkedList的区别
- ArrayList Vector LinkedList 区别与用法
- ArrayList Vector LinkedList 区别与用法
- List, Vector, ArrayList, LinkedList, 区别总结