List集合的知识点

核心基础概念
定义:List 是 Java 集合框架中继承自 Collection 接口的有序集合(序列)。

核心特性(三大保证):

有序性:元素插入的顺序与迭代输出的顺序一致(索引从 0 开始)。

可重复性:允许存储 null 和重复的元素(通过 equals() 方法判断)。

索引访问:支持通过整数索引(get(int index))进行随机访问。

  1. 继承体系与架构
    text
    Iterable (接口)
    └── Collection (接口)
    └── List (接口)
    ├── AbstractList (抽象类)
    │ ├── ArrayList (实现类) —— 日常开发首选
    │ └── AbstractSequentialList (抽象类)
    │ └── LinkedList (实现类) —— 双向链表
    ├── Vector (实现类) —— 线程安全,但已过时
    │ └── Stack (实现类) —— 栈,继承自Vector
    └── CopyOnWriteArrayList (实现类) —— 并发包中的线程安全类
  2. 三大主流实现类对比(高频考点)
    特性 ArrayList LinkedList Vector
    底层数据结构 动态数组(Object[]) 双向链表(JDK 1.6之前为双向循环链表) 动态数组(Object[])
    线程安全 不安全(非同步) 不安全(非同步) 安全(方法用 synchronized 修饰)
    初始容量 10(JDK 1.8 懒加载,添加元素时分配) 无初始容量概念 10
    扩容机制 扩容为原容量的 1.5 倍(oldCapacity >> 1) 无需扩容(链表动态增长) 扩容为原容量的 2 倍
    随机访问(查) O(1),极快(实现 RandomAccess 接口) O(n),极慢(需遍历指针) O(1)
    增删操作 尾部增删 O(1);中间增删 O(n)(涉及数组拷贝) 头部/尾部 O(1);中间指定位置 O(n)(需先遍历) 同 ArrayList(但线程安全开销大)
    内存占用 数组末尾会有预留的容量空间(浪费内存) 每个节点存储前驱/后继指针(占用更大内存) 同 ArrayList
  3. 底层核心源码原理(深挖)
    ArrayList 扩容细节:

JDK 1.8:创建时底层数组初始化为空数组 {},第一次 add 时扩容到 10。

扩容调用 Arrays.copyOf(),底层是 System.arraycopy()(本地方法,内存拷贝,效率高)。

最大容量为 Integer.MAX_VALUE - 8(预留 8 字节作为对象头存储)。

LinkedList 结构:

节点对象 Node 包含 item(值)、next(后继)、prev(前驱)。

posted @ 2026-06-22 22:30  我不想喝清水  阅读(19)  评论(0)    收藏  举报