1. ArrayList基础操作全解析
ArrayList作为Java集合框架中最常用的动态数组实现,几乎每个Java开发者都绕不开它。记得我刚入行时,第一次用ArrayList存储用户数据就踩了不少坑——比如在遍历时删除元素导致ConcurrentModificationException异常,或者自定义对象没重写equals()方法导致contains()判断失效。今天我们就来彻底搞懂ArrayList对字符串和自定义对象的存储、修改、删除及遍历操作。
ArrayList底层基于Object[]数组实现,当元素数量超过数组容量时会自动扩容1.5倍。与LinkedList相比,它的随机访问效率更高(O(1)复杂度),但在中间位置插入/删除元素时需要移动后续所有元素(O(n)复杂度)。理解这些特性对正确使用API至关重要。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 存储字符串元素的标准操作
2.1 基础存储与初始化
创建存储字符串的ArrayList有三种常见方式:
java复制// 方式1:默认初始容量(10)
ArrayList<String> strList = new ArrayList<>();
// 方式2:指定初始容量
ArrayList<String> strList = new ArrayList<>(100);
// 方式3:通过已有集合初始化
List<String> temp = Arrays.asList("A", "B", "C");
ArrayList<String> strList = new ArrayList<>(temp);
提示:预估数据量并设置合理初始容量能减少扩容开销。比如已知要存储1000个元素,直接new ArrayList<>(1000)比默认扩容7次效率更高。
2.2 元素添加与扩容验证
添加元素的方法区别:
java复制strList.add("Java"); // 尾部追加
strList.add(0, "Python"); // 指定索引插入
strList.addAll(Arrays.asList("C++", "Go")); // 批量添加
验证扩容机制的测试代码:
java复制ArrayList<String> demo = new ArrayList<>(2);
System.out.println(demo.size()); // 0
demo.add("A");
System.out.println(demo.size()); // 1
demo.add("B");
System.out.println(demo.size()); // 2
demo.add("C"); // 触发扩容
System.out.println(demo.size()); // 3
