ArrayList、LinkedList、Vector的区别

一、 ArrayList底层是采用数组实现的(而且改数组的类型是Object类型的)2 若是是jdk6的话,采用Array.of()方法来生成一个新的数组,若是是jdk5.0的话,使用的是System.arraycopy方法(将数组拷贝)
3 、List list = new ArrayList();时,底层会生成一个长度为10的数组来存放对象,若是预先知道list
会存放多少个对象的话,最好经过new ArrayList(int length)的方式先肯定数组的最小长度,如new
ArrayList(50),这样能提升底层的效率。
4 、对于ArrayList与Vector来讲,底层都是采用数组方式来实现的(该数组是一个Object类型的数组)
五、 对于ArrayList,全部方法都不是同步的,对于Vector,大部分是public的方法都是同步的。
六、LinkedList底层是由双向循环链表实现的,对于ArrayList,查找速度很是快,增长和删除操做很是
慢。(本质上是由数组的特色来决定的)
七、对于LinkList,查找速度很是慢,增长和删除操做很是快。(本质上是由双向循环链表的特色来决定
的)
1、同步性数组

ArrayList,LinkedList是不一样步的,而Vestor是的。因此若是要求线程安全的话,可使用ArrayList或LinkedList,能够节省为同步而耗费开销。但在多线程的状况下,有时候就不得不使用Vector了。固然,也能够经过一些办法包装ArrayList,LinkedList,使他们也达到同步,但效率可能会有所下降。安全

2、数据增加
从内部实现机制来说ArrayList和Vector都是使用Objec的数组形式来存储的。当你向这两种类型中增长元素的时候,若是元素的数目超出了内部数组目前的长度它们都须要扩展内部数组的长度,Vector缺省状况下自动增加原来一倍的数组长度,ArrayList是原来的50%,因此最后你得到的这个集合所占的空间老是比你实际须要的要大。因此若是你要在集合中保存大量的数据那么使用Vector有一些优点,由于你能够经过设置集合的初始化大小来避免没必要要的资源开销。多线程

3、检索、插入、删除对象的效率线程

ArrayList和Vector中,从指定的位置(用index)检索一个对象,或在集合的末尾插入、删除一个对象的时间是同样的,可表示为O(1)。可是,若是在集合的其余位置增长或移除元素那么花费的时间会呈线形增加:O(n-i),其中n表明集合中元素的个数,i表明元素增长或移除元素的索引位置。为何会这样呢?觉得在进行上述操做的时候集合中第i和第i个元素以后的全部元素都要执行(n-i)个对象的位移操做。
LinkedList中,在插入、删除集合中任何位置的元素所花费的时间都是同样的—O(1),但它在索引一个元素的时候比较慢,为O(i),其中i是索引的位置。对象

因此,若是只是查找特定位置的元素或只在集合的末端增长、移除元素,那么使用Vector或ArrayList均可以。若是是对其它指定位置的插入、删除操做,最好选择LinkedList索引

相关文章
相关标签/搜索