1. 概述

在这个教程中,我们将学习如何在ArrayList(/java-arraylist)中插入一个对象到特定位置。

2. 示例

如果我们想在一个ArrayList(/java-arraylist)中向特定位置添加元素,可以使用add(int index, E element)方法,这是List<E>接口实现提供的。这个方法允许我们在指定索引处添加元素。

然而,如果索引超出范围(即索引小于0或大于size()),它可能会抛出IndexOutOfBoundsException。这意味着,如果我们有一个只包含4个元素的ArrayList,我们不能在索引4处添加项目,因为从0开始计数。在这种情况下,我们应该使用标准的add(E e)方法。

首先,我们创建一个新的ArrayList并添加四个元素:

List<Integer> integers = new ArrayList<>();
integers.add(5);
integers.add(6);
integers.add(7);
integers.add(8);
System.out.println(integers);

这将得到:

现在,如果我们尝试在索引1处添加另一个元素:

integers.add(1,9);
System.out.println(integers);

ArrayList内部会先移动从给定索引开始的对象:

这是因为ArrayList是一个可扩展的数组,当需要时会自动调整容量:

然后在给定索引处添加新项:

ArrayList中在特定索引处添加会导致平均操作性能为O(n/2)。例如,LinkedList的平均复杂度为O(n/4),如果索引为0则为O(1)。因此,如果我们在特定位置频繁添加元素,我们需要仔细考虑使用LinkedList

我们还可以看到,元素的顺序不再正确。当我们手动在特定位置添加项目时,通常希望保持这种顺序。否则,我们可以使用Integer::compareToArrayList进行排序,或者实现自己的Comparator

3. 总结

在这篇文章中,我们讨论了add(int index, E element)方法,以便在ArrayList<E>中向特定位置插入新元素。我们需要确保索引在ArrayList的有效范围内,并确保添加正确的对象。

文章中提到的所有代码示例可以在GitHub上找到。