从ArrayList中删除元素

2023/06/07

1. 概述

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

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传递一个索引作为参数,我们可以删除列表中指定位置的元素,并将任何后续元素向左移动,从它们的索引中减去1。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这样的第三方库来做到这一点,如果我们想更深入,我们可以看到如何以有效的方式删除所有特定的出现

5. 总结

在本教程中,我们研究了在Java中从ArrayList中删除元素的各种方法。

与往常一样,本教程的完整源代码可在GitHub上获得。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章