Java数组列表中删除元素
Contents
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 这样的第三方库来完成,如果我们想更深入,我们可以看到如何以有效的方式删除所有特定的事件 。