1. ArrayList基础操作全解析
ArrayList作为Java集合框架中最常用的动态数组实现,几乎出现在所有Java开发者的日常编码中。今天我想结合自己多年的项目经验,系统梳理ArrayList对字符串和自定义对象的存储、修改、删除及遍历操作,分享一些实际开发中的技巧和避坑指南。
记得刚入行时,我曾在一次线上事故中因为不熟悉ArrayList的删除操作导致数据错乱,从那以后就养成了深入研究每个API底层机制的习惯。ArrayList看似简单,但想要真正用好它,需要理解其动态扩容机制、fail-fast机制以及各种操作的时间复杂度。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 存储操作详解
2.1 字符串元素的存储
存储字符串是ArrayList最基础的用法,但其中也有不少细节需要注意:
java复制ArrayList<String> strList = new ArrayList<>();
strList.add("Java");
strList.add("Python");
strList.add(1, "Golang"); // 在索引1处插入元素
这里有几个关键点:
- 初始容量默认为10,当元素数量超过容量时会自动扩容1.5倍
- 插入元素时如果指定位置已有元素,该位置及后续元素会整体后移
- 频繁插入操作(特别是列表前部)会导致大量数组拷贝,时间复杂度O(n)
实际项目中,如果预知数据量较大,建议在构造时指定初始容量:
new ArrayList<>(1000),避免多次扩容带来的性能损耗。
2.2 自定义对象的存储
存储自定义对象时,有几个必须注意的要点:
java复制class Student {
private String name;
private int age;
// 构造方法、getter/setter省略
}
ArrayList<Student> stuList = new ArrayList<>();
stuList.add(new Student("张三", 20));
stuList.add(new Student("李四", 22));
关键注意事项:
- 自定义类必须正确实现equals()和hashCode()方法,否则会影响contains
