Contents

Java数组中删除元素

1. 概述

在本快速教程中,我们将了解使用Apache Commons Lang从 Java 数组中删除元素的各种方法。

2. Maven

让我们将commons-lang3 依赖添加到我们项目的pom.xml文件中:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.12.0</version>
</dependency>

3. 移除元素

在开始之前,让我们看看当我们从数组中删除一个元素而不使用Apache Commons Lang 库中的ArrayUtils类时会发生什么。

给定下面的数组,让我们删除index 2处的元素:

/uploads/java_array_remove_element/1.png

一种简单的方法是将index 2中存储的值替换为index 3中存储的值,直到我们到达数组的末尾:

/uploads/java_array_remove_element/3.png

请注意,通过以上述方式删除元素,数组的大小将保持不变,并且存储在最后一个索引处的值将为空。由于数组在初始化期间分配了固定的内存大小,因此删除元素不会调整数组的大小。

现在让我们看看使用Apache Commons Lang的ArrayUtils类的remove方法删除元素时的数组表示:

/uploads/java_array_remove_element/5.png

我们可以看到,这里的数组大小在元素被移除后调整为5。remove方法创建一个全新的数组并复制除被删除值之外的所有值。

ArrayUtils类提供了两种从数组中删除元素的方法。接下来让我们看看这些。

4. 使用索引作为输入

我们可以删除元素的第一种方法是使用ArrayUtils#remove通过它的索引:

public int[] removeAnElementWithAGivenIndex(int[] array, int index) {
      return ArrayUtils.remove(array, index);
}

另一个变体是removeAll方法,我们可以使用它从数组中删除多个元素,给定它们的索引:

public int[] removeAllElementsWithGivenIndices(int[] array, int... indices) {
    return ArrayUtils.removeAll(array, indices);
}

5. 使用元素作为输入

或者,假设我们不知道要删除的索引。在这种情况下,我们可以使用 ArrayUtils#removeElement提供要删除的元素:

public int[] removeFirstOccurrenceOfGivenElement(int[] array, int element) {
    return ArrayUtils.removeElement(array, element);
}

这是此方法ArrayUtils#removeElements的另一个有用变体,以防我们要删除多个元素:

public int[] removeAllGivenElements(int[] array, int... elements) {
    return ArrayUtils.removeElements(array, elements);
}

有时,我们希望删除给定元素的所有出现。我们可以通过使用ArrayUtils#removeAllOccurences来做到这一点:

public int[] removeAllOccurrencesOfAGivenElement(int[] array, int element) {
    return ArrayUtils.removeAllOccurences(array, element);
}