java 集合中arrayList为什么查询比较快,而插入和删除比较慢

  1. 底层数据结构
    ArrayList 基于动态数组实现,内部通过一个连续的数组存储元素。数组的内存空间是连续分配的,并且每个元素都有固定的索引位置。

  2. 查询快的原因

    由于数组是连续存储的,ArrayList 可以通过索引直接访问元素 (时间复杂度为 O (1))。 计算机通过数组的首地址寻址公式能够很快的找到想要访问的元素

java 复制代码
寻址公式 = 基地址 + 索引 × 元素大小

例如,要获取第 i 个元素,只需通过公式 elementData[i] 直接计算内存地址并访问,无需遍历前面的元素。

  1. 插入和删除慢的原因

  2. 数组是臆断连续的内存空间,因此为了保证数组的连续性会使得数组的插入和删除的效率变得很低

  3. 当在数组中间或头部进行插入 / 删除操作时:

    • 需要移动受影响的元素 来维持数组的连续性。
      例如,在索引 i 处插入元素时,需要将 i 及之后的所有元素向后移动一位;删除时则需要将 i 之后的所有元素向前移动一位。
    • 移动元素的操作时间复杂度为 O (n)(n 为元素总数),元素越多,效率越低。
    • 此外,当数组容量不足时,ArrayList 会触发扩容机制(通常是创建原容量 1.5 倍的新数组,并复制所有元素),这也会额外消耗时间。
相关推荐
我命由我123454 小时前
Android Studio - Android Studio 自定义预览尺寸
android·java·ide·java-ee·android studio·android-studio·android runtime
mCell5 小时前
你以为短链接只是 Hash + 301/302?
后端·算法·架构
怕浪猫5 小时前
现在的"AI 原生应用"热潮,恰恰证明了大多数产品需求本身就是个草台班子
面试
咖啡八杯5 小时前
GoF设计模式——迭代器模式
java·后端·设计模式·迭代器模式
AIGS0015 小时前
企业AI落地的关键认知:向量空间JBoltAI的本体语义平台
java·人工智能·人工智能ai大模型应用
KaMeidebaby6 小时前
卡梅德生物技术快报|抗体亲和力成熟工业化调控新机制:差异性浆细胞增殖工艺优化思路
java·开发语言·人工智能·算法·机器学习·架构·spark
醉城夜风~7 小时前
Java详解经典算法题:接雨水(三种实现方案+原理剖析)
java·开发语言·算法
TPBoreas8 小时前
MySQL性能优化面试全攻略
mysql·面试·性能优化
数智化转型推荐官9 小时前
2026统一身份管理系统五大发展趋势解读
java·运维·微服务
看菜鸡互9 小时前
探索用 SlideML 让大模型生成 PPT 的实验方法
java·运维