Bohr-L Bohr-L
首页
技术
常见面试题
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

刘博

I'm a slow walker, But I never walk backwards.
首页
技术
常见面试题
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 数据处理与存储类

  • Spring 生态类

  • 缓存问题类

  • 多线程类

  • JVM 类

  • MySQL 类

  • Java 8 + 特性类

    • 使用 Java 8 的优点是什么?
    • 集合与流有何不同?
    • 什么是 Lambda 表达式?
    • 解释 Predicate 和 Consumer 函数式接口
    • peek () 方法在 Java 8 中的作用?
    • 什么是函数式接口?
    • 接口中的静态方法有什么作用?
    • skip (long) 和 limit (long) 的区别?
    • 抽象类和接口的异同?
    • overload 与 override 的区别?
    • HashMap 在 Java 8 中的变化?
    • HashMap、LinkedHashMap、Hashtable、ConcurrentHashMap 的区别?
    • Lambda 参数列表与箭头运算符的作用?
    • sleep () 和 wait () 的区别?
    • throw 与 throws 的区别?
    • final、finally、finalize 的区别?
    • Collection 与 Collections 的区别
    • ArrayList、LinkedList、Vector 的区别?
    • 其他技术类

    • 常见面试题
    • Java 8 + 特性类
    刘博
    2025-12-29
    目录

    ArrayList、LinkedList、Vector 的区别?

    这三个均是 Java 中List接口的实现类,核心差异在于 “数据结构、性能、线程安全、功能特性”,具体对比如下:

    对比维度 ArrayList LinkedList Vector
    数据结构 动态数组(数组扩容) 双向链表 动态数组(数组扩容)
    线程安全 非线程安全 非线程安全 线程安全(方法加synchronized锁)
    访问效率(随机访问) 高(数组支持索引访问,O (1)) 低(需遍历链表,O (n)) 高(数组支持索引访问,O (1))
    增删效率(指定位置) 低(需移动数组元素,O (n)) 高(仅需修改链表指针,O (1)) 低(需移动数组元素,O (n))
    扩容机制 初始容量 10,扩容时增长 50%(新容量 = 旧容量 ×1.5) 无扩容机制(链表按需添加节点) 初始容量 10,扩容时增长 100%(新容量 = 旧容量 ×2)
    内存占用 连续内存,浪费较少(扩容时有冗余空间) 非连续内存,每个节点额外存储前后指针,浪费较多 连续内存,浪费较多(扩容增长比例大)
    核心用途 单线程场景,频繁随机访问、少量增删 单线程场景,频繁增删、少量随机访问 Legacy 代码(不推荐新使用),多线程场景可替代为Collections.synchronizedList(new ArrayList<>())

    # 关键特性详解

    • ArrayList:最常用的 List,动态数组结构适合随机访问(如get(index)),单线程下性能最优,适合 “读多写少” 场景;
    • LinkedList:双向链表结构适合频繁增删(如add(0, obj)、remove(0)),但随机访问效率低,适合 “写多读少” 场景,还实现了Deque接口,支持队列 / 栈操作;
    • Vector:古老的线程安全 List,通过synchronized修饰方法实现线程安全,但锁粒度大(全表锁),并发性能差,现在已被ArrayList + Collections.synchronizedList()或CopyOnWriteArrayList替代。

    # 优化建议

    • 若已知数据量,创建 ArrayList 时指定初始容量(如new ArrayList<>(100)),减少扩容次数;
    • 频繁在链表头部 / 尾部增删,优先用 LinkedList;
    • 多线程场景,避免用 Vector,优先用CopyOnWriteArrayList(读无锁,写复制,适合读多写少)或Collections.synchronizedList(new ArrayList<>())。

    上次更新: 12/30/2025
    Collection 与 Collections 的区别
    有没有碰到过执行计划不一致的情况?

    ← Collection 与 Collections 的区别 有没有碰到过执行计划不一致的情况?→

    最近更新
    01
    CPU 使用率较高排查和解决
    12-29
    02
    JVM OOM 问题如何排查和解决
    12-29
    03
    接口防刷怎么实现?
    12-29
    更多文章>
    Theme by Vdoing | Copyright © 2025-2026 Bohr-L's note
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式