zoukankan      html  css  js  c++  java
  • 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)。

    注意:

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

  • 相关阅读:
    【Codeforces 475F】—Meta-universe(Set)
    【Codeforces 475F】—Meta-universe(Set)
    【UOJ #79】—一般图最大匹配(带花树)
    【UOJ #79】—一般图最大匹配(带花树)
    【NOIp2019模拟】题解
    【NOIp2019模拟】题解
    涉及到的业务逻辑总结
    2016-9-14
    Spring MVC
    2016-9-12
  • 原文地址:https://www.cnblogs.com/buhuiflydepig/p/12512453.html
Copyright © 2011-2022 走看看