ArrayList, LinkedList, Vector - dudu:史上最详解
<p style="text-align: center;">ArrayList,LinkedList,Vector - dudu:史上最详解 我们来比较一下ArrayList, LinkedLIst和Vector它们之间的区别。BZ的JDK版本是1.7.0_80 经常在面试的时候,或者在大家做project的时候,都会被它们的区别产生疑惑。或者对它们的用法并不是很了解。那么我们今天就来看看他们的区别和用法。 以下是本文的大纲: 一.ArrayList,LinkedList和Vector的区别 二.详解ArrayList 三.详解Vector 四.详解LinkedList 五.在并发情况下,怎样使用它们 若有不正之处,还请多多谅解,并希望批评指正。 请尊重作者劳动成果,转发请标明blog地址
一.ArrayList,LinkedList和Vector的区别ArrayList,LinkedList和Vector都实现了List接口,所使用的方法也很相似,主要区别在于实现方法的不同,所有对不同的操作具有不同的效率。 1.ArrayListArrayList是一个可以改变大小的,线程不同步(不支持并发)的数组,内部值可以为null。 当更多的元素加入到ArrayList中时,其大小会自动增加,内部元素可以直接通过get/set方法进行访问,因为ArrayList本质上即使一个数组。 因为ArrayList是不支持并发的数组,但是如果我们在使用的过程中需要ArrayList也有同步功能,可以使用Collections.synchronziedList(new ArrayList 2.Vector之所以把Vector放在这里的原因是因为Vector和ArrayList是否类似,但是它是属于线程同步(支持并发)的数组,并且内部值也可以为null。如果你的程序本身是线程安全的(没有多个线程之间共享同一个集合/对象),那么请使用ArrayList吧。 3.LinkedListLinkedList底层是基于双链表实现的,在添加和删除元素时具有比ArrayList更好的性能。但是在get/set方面要弱于ArrayList(前提是这些对比是在数据量很大或者操作很繁琐的情况下)。LinkedList内部值可以为null,但是当我们调用值为null的元素的时候会出现NullPointerException。 ? ? LinkedList更适合于以下场景: ? ? I.没有大量的随机访问操作。 ? ? II.有大量的add/remove操作。 概括起来大概是这个样子:ArrayList和Vector它们底层实现为数组,值可为null, ArrayList不支持并发,Vector支持并发; LinkedList底层基于双链表,因此在add/remove元素时比ArrayList要快(注意前提)。 二.详解ArrayList先来看看ArrayList的源码 ArrayList |