Contents

Java数组列表中删除元素

1. 概述

在本教程中,我们将了解如何使用不同的技术从 Java 中的ArrayList中删除元素。给定一个运动列表,让我们看看如何摆脱以下列表中的一些元素:

List<String> sports = new ArrayList<>();
sports.add("Football");
sports.add("Basketball");
sports.add("Baseball");
sports.add("Boxing");
sports.add("Cycling");

2. ArrayList#remove

ArrayList有两种可用的方法来删除元素,传递要删除的元素的索引,或者传递要删除的元素本身(如果存在)。我们将看到这两种用法。

2.1. 按索引删除

使用remove将索引作为参数传递,我们可以删除列表中指定位置的元素并将任何后续元素向左移动,从它们的索引中减去一个。执行后,remove方法会返回被移除的元素:

sports.remove(1); // since index starts at 0, this will remove "Basketball"
assertEquals(4, sports.size());
assertNotEquals(sports.get(1), "Basketball");

2.2. 按元素移除

另一种方法是使用此方法**从列表中删除第一次出现的元素。**正式地说,如果存在,我们将删除索引最低的元素,如果不存在,则列表保持不变:

sports.remove("Baseball");
assertEquals(4, sports.size());
assertFalse(sports.contains("Baseball"));

3. 迭代时移除

有时我们想在循环时从ArrayList中删除一个元素。由于没有生成ConcurrentModificationException,我们需要使用Iterator类来正确执行此操作。

让我们看看如何摆脱循环中的元素

Iterator<String> iterator = sports.iterator();
while (iterator.hasNext()) {
    if (iterator.next().equals("Boxing")) {
        iterator.remove();
    }
}

4. ArrayList#removeIf (JDK 8+)

如果我们使用JDK 8 或更高版本,我们可以利用ArrayList#removeIf删除ArrayList满足给定谓词的所有元素。

sports.removeIf(p -> p.equals("Cycling"));
assertEquals(4, sports.size());
assertFalse(sports.contains("Cycling"));

最后,我们可以使用像 Apache Commons 这样的第三方库来完成,如果我们想更深入,我们可以看到如何以有效的方式删除所有特定的事件