CSNotesCSNotes
MySQL
Java
SSM
Redis
学习路线
TODO
实用工具
GitHub
MySQL
Java
SSM
Redis
学习路线
TODO
实用工具
GitHub
  • 第一章 Java 基础

    • 一、OOP 三大特性
    • 二、8 种基本数据类型
    • 三、BigDecimal
    • 四、类的访问权限
    • 五、包装类
    • 六、继承
    • 七、多态
    • 八、final 关键字
    • 九、static 关键字
    • 十、抽象类
    • 十一、接口
    • 十二、四种内部类
    • 十三、Lambda+ 函数式接口
    • 十四、枚举 enum
    • 十五、反射
    • 十六、注解
    • 十七、泛型
  • 第二章 集合

    • 一、集合框架总览
    • 二、ArrayList 源码解析
    • 三、LinkedList 源码分析
    • 四、HashSet
    • 五、String 底层结构
    • 六、String 常量池与 equals
    • 七、StringBuffer
    • 八、时间类:4 代演进史
    • 九、Stream 流
    • 十、工具类设计规范
    • 十一、Assert
    • 十二、常用工具类
  • 第三章 设计模式

    • 一、七大设计原则
    • 二、单例模式(饿汉式)
    • 三、装饰器模式
    • 四、策略模式
  • 第四章 异常

    • 一、Java 异常体系
    • 二、异常(完整版)
  • 第五章 并发

    • 一、多线程基础 JUC
    • 二、多线程进阶
    • 三、线程池
  • 第六章 JVM

    • 一、JSON 库
  • 第七章 RPC

    • 一、RPC 定义
  • 第八章 消息队列

    • 一、MQ 业务解耦
  • 第九章 JDK17 新特性

    • JDK17 新特性
    • 项目

二、ArrayList 源码解析

ArrayList 实现了 List 接口,继承了抽象类 AbstractList。size 表示含有的元素。capacity 表示上限。

private void rangeCheck(int index) {
    if (index >= size)
        throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
}
public E get(int index) {
        rangeCheck(index);

        return elementData(index);
    }
public E set(int index, E element) {
        rangeCheck(index);

        E oldValue = elementData(index);
        elementData[index] = element;
        return oldValue;
    }

使用 get 和 set 方法会比用下标返回多一个范围检查。

创建 ArrayList 对象时,如果使用无参构造器,则初始 elementData 容量为 0,第一次添加,则扩容 elementData 为 10。如需要再次扩容,则扩容 elementData 为 1.5 倍。

集合只能存储引用类型。

编辑此页
上次更新: 2026/9/18 20:24
Prev
一、集合框架总览
Next
三、LinkedList 源码分析