当前位置: 首页 > news >正文

10. JavaArrayList 核心笔记

一、集合与数组对比

ArrayList 是基于数组实现的动态集合类,底层为Object[],通过自动扩容机制解决数组长度固定的局限。

对比维度数组(Array)ArrayList
长度固定,定义后不可变可变,自动扩容
存储类型基本数据类型 + 引用数据类型仅引用数据类型;基本类型需包装类(自动装箱)
内置方法length属性add()/remove()/get()/set()/size()
泛型支持不支持支持(如ArrayList<String>
语法int[] arr = new int[5];ArrayList<Integer> list = new ArrayList<>();

使用场景选择:

场景数组ArrayList
元素数量固定、追求极致性能适用不适用
元素数量不确定、频繁增删不适用适用
存储基本数据类型适用需装箱
快速遍历与查找推荐(方法更丰富)

二、ArrayList 核心成员方法

方法签名说明返回值
boolean add(E e)向集合末尾添加元素固定返回true
boolean remove(E e)删除第一个匹配的指定元素成功true,失败false
E remove(int index)删除指定索引处的元素返回被删除的元素
E set(int index, E e)修改指定索引处的元素返回被替换的原元素
E get(int index)获取指定索引处的元素返回对应元素
int size()获取集合中有效元素个数(非底层容量)元素数量

三、底层实现原理

  1. 初始容量:创建ArrayList时,默认构造一个长度为 10 的Object[]数组。
  2. 自动扩容:当元素数量达到容量上限时,自动创建更大的数组(默认扩容至原容量的 1.5 倍),将原数组元素复制到新数组。
  3. 封装机制add()/get()/remove()等方法底层均操作该Object[]数组,对使用者透明。

四、基础使用示例

// 1. 创建 ArrayList(指定泛型) ArrayList<String> list = new ArrayList<>(); // 2. 添加元素(自动扩容) list.add("张三"); list.add("李四"); list.add("王五"); // 3. 获取元素 String name = list.get(1); // 获取索引 1:李四 // 4. 修改元素 list.set(2, "王六"); // 索引 2 替换为王六,返回原元素 "王五" // 5. 删除元素 list.remove("张三"); // 按元素删除,返回 true list.remove(0); // 按索引删除,返回被删元素 // 6. 获取元素个数 int size = list.size();

与数组的代码对比:

// 数组方式 User[] arr = new User[3]; arr[0] = user1; arr[1] = user2; arr[2] = user3; // arr[3] = user4; // 编译通过但运行时抛异常,数组长度固定 // ArrayList 方式 ArrayList<User> list = new ArrayList<>(Arrays.asList(user1, user2, user3)); list.add(user4); // 直接追加,自动扩容

五、注意事项

  1. 索引越界:访问 / 删除 / 修改时,索引需在0 ~ size()-1范围内,否则抛出IndexOutOfBoundsException
  2. 泛型约束:创建时指定泛型(如ArrayList<String>),编译器强制类型检查,避免运行时ClassCastException
  3. 基本类型装箱intIntegerdoubleDouble,由 JVM 自动装箱 / 拆箱,无需手动转换。
  4. 线程不安全ArrayList非线程安全,多线程环境需使用Collections.synchronizedList()CopyOnWriteArrayList
http://www.rkmt.cn/news/1439560.html

相关文章:

  • 第五章:年终
  • [分享]EssentialPIM安卓版(手机个人信息管理软件)
  • 告别静音!Windows 11系统声音保姆级配置指南(附完整音效清单与事件对照表)
  • 智慧火灾巡检-基于深度学习火灾烟雾识别系统,森林火灾识别系统。森林火灾检测 无人机森林火灾检测
  • VSCode配置QT环境
  • 华为eNSP静态路由实验教学
  • 航拍地面目标数据集1713张VOC+YOLO格式
  • Ubuntu 远程登录配置
  • 工厂设备预测性维护的必要性与实践案例
  • 别再死记硬背了!用Spring Boot实战案例,5分钟搞懂UML类图的6种关系
  • 告别无效刷屏!TrendRadar:最快30秒部署的开源热点助手,让你只看真正关心的新闻
  • 当AI能够创造AI时,人类该如何与其共舞?
  • 从保温杯到CPU散热:聊聊不良导体热导率测量的那些事儿
  • 从图形学老将到NeRF新贵:聊聊Instant-NGP里球谐函数的前世今生
  • 远程开发实战:在AutoDL云服务器上跑通COLMAP GUI并显示到本地VSCode(VNC+SSH隧道全攻略)
  • JDspyder:京东抢购成功率提升300%的自动化脚本技术解析
  • 别再死记硬背!用Python/Matlab模拟电化学暂态过程(附代码)
  • 22kW双向CLLC谐振DC-DC模块全套工程资料:含AD/Cadence双格式PCB、TI C2000 CCS源码、SiC器件应用指南与完整BOM
  • 天津除甲醛公司哪家好?2026年5月推荐生态美家口碑靠谱品牌对比 - 品牌推荐
  • 人类与AGI认知能力对比:从模式识别到创造性思维的深度分析
  • 从‘泵’的原理到实战:一个电容两个二极管,轻松玩转电荷泵升压与降压
  • 终极指南:如何快速免费将NCM文件转换为MP3/FLAC格式
  • 用Python模拟《信任的进化》博弈游戏:复读机策略为何总能赢?
  • Arm CoreLink NI-710AE NoC架构与安全隔离机制解析
  • 别再只写单向RNN了!PyTorch中BiGRU的隐藏层拼接与梯度处理避坑指南
  • ChatGPT时代,智能合约工程师如何利用AI提升开发效率与安全?
  • 智慧树自动刷课插件:3步实现自动化学习,节省80%手动操作时间
  • 2026鹤壁市最具性价比(黄金+K金+白银+铂金)正规靠谱回收门店实力排行榜推荐及联系方式 - 前途无量YY
  • 时间序列预测:从白噪声到积分模型的黄金基准实践
  • Windows 11 下用 PyTorch 1.13 + TorchRL 搞定 MuJoCo 环境,手把手教你跑通 PPO 算法(附避坑指南)