ArrayLIst、Vector和LinkedList三者的区别

1、从存储结构来看:

  ArrayList和Vector是由数组构成,其默认的初始容量为10。而LinkedList是由双向链表构成(含头结点)。

 

2、从线程安全来看:

  ArrayList和LinkedList是线程不安全的,如果需要在并发的环境下使用它们,可以用Collections类中的静态方法synchronizedList()对ArrayList和LinkedList进行调用即可。

  而Vector是线程安全的,它的源码中的大部分方法都包含关键字sydnchronized。

  但是Vector的效率没有ArrayList和LinkedList高。

 

3、从扩容机制来看:

  首先,LinkedList是没有扩容的,因为是链表实现的,这个我们不需要管。  

  下面我们来看,ArrayList和Vector的扩容机制:

    (1)ArrayList扩容之后的容量是之前的1.5倍(默认)。

    (2)Vector扩容之后的容量是之前的两倍(默认)。

    (3)其中Vector可以设置容量增量,而ArrayList不可以设置。

 

4、从增删查改的效率来看:

  (1)ArrayList和Vector:如果是在指定位置检索,或者是在集合尾部进行插入和删除的话,时间复杂度是O(1),但是如果是其他地方插入或者删除的话,时间复杂度就变成了O(n)。

  (2)LinkedList:它的插入和删除的时间复杂度都是O(1),但是它的检索一个元素的话,时间复杂度就O(n)。

 

 

注意:

在这里需要说一下可变长度数组的原理:当元素个数超过数组的长度时,会产生一个新的数组,将原数组的数据复制到新数组,再将新的元素添加到新数组中。

posted @ 2020-03-17 18:11  不会fly的pig  阅读(332)  评论(0编辑  收藏  举报