• 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)。

    注意:

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

  • 相关阅读:
    若依问题解决(一)
    Java 将两个List转换为流合并List
    后端返回前端文本换行显示,只能在前端再转换
    Java Stream() 流根据对象属性去重
    vue 当前端传回后端,后端使用实体类接收数据显示报错
    js 中 getMonth() 获取的月份比现实少一个月
    vue连个数组对比
    JS链接跳转方法
    ElementUI--表格toggleRowSelection无法选中
    Linux 常用命令
  • 原文地址:https://www.cnblogs.com/buhuiflydepig/p/12512453.html
Copyright © 2020-2023  润新知