如何向ArrayList的头部或尾部批量添加元素
现有代码问题汇总
- 语法类错误:
- 方法参数
ArrayList<> coordinateList的泛型缺少实际类型,应写为ArrayList<Coordinate> - List 获取元素要调用
get()方法,不能直接用括号()调用 - 单个元素添加方法末尾缺少分号
- 头部添加方法里误用了不存在的
coordinatesList变量,实际应取全局的coordinates列表
- 方法参数
- 逻辑类错误:
- 尾部添加方法的逻辑完全错误,循环内操作的是传入列表自身的元素,完全没有用到要批量添加的
coordinates列表,还会因为循环过程中列表长度不断变长触发死循环
- 尾部添加方法的逻辑完全错误,循环内操作的是传入列表自身的元素,完全没有用到要批量添加的
- 性能类问题:
- 逐个向 ArrayList 头部插入元素,每次插入都会触发内部数组的整体拷贝,数据量大时性能损耗极高
正确实现方案
Java 标准库已经提供了批量添加的方法addAll(),不需要手动写循环,性能也比手动插入高很多:
import java.util.ArrayList; import java.util.List; public class CoordinateManager { // 存储坐标的全局列表 private List<Coordinate> coordinates = new ArrayList<>(); // 添加单个坐标到全局列表 void addCoordinateToList(Coordinate singleCoordinate) { coordinates.add(singleCoordinate); } /** * 将全局 coordinates 列表的所有坐标批量添加到目标列表的尾部 * @param targetList 要插入的目标列表 */ void addAllToTargetBack(ArrayList<Coordinate> targetList) { // 直接调用标准库批量添加方法,默认插入到尾部 targetList.addAll(coordinates); } /** * 将全局 coordinates 列表的所有坐标批量添加到目标列表的头部 * @param targetList 要插入的目标列表 */ void addAllToTargetFront(ArrayList<Coordinate> targetList) { // 第一个参数指定插入的起始位置,从0位置开始批量插入 targetList.addAll(0, coordinates); } }
额外优化建议
如果你的场景需要频繁在列表头部插入元素,更推荐用LinkedList实现类,头部插入的时间复杂度为O(1),比ArrayList的O(n)性能好很多。
内容的提问来源于stack exchange,提问作者Weightlifting Without Limits
相关产品推荐
相关产品推荐

