Java List与ArrayList:深入解析remove()方法的使用与注意事项

Java List `remove()` 方法简介

Java的List接口中的remove()方法用于从列表中移除元素。ArrayListList接口最常用的实现类,因此本文中的示例将主要使用ArrayListremove()方法。

Java List 的 `remove()` 方法详解

从列表中删除元素主要有两种remove()方法:

  1. E remove(int index): 这个方法移除指定索引位置的元素并返回该元素。随后的元素会向左移动一个位置。如果指定的索引超出范围(即小于0或大于等于列表大小),则会抛出IndexOutOfBoundsException异常。如果列表的实现不支持此操作,则会抛出UnsupportedOperationException异常。
  2. boolean remove(Object o): 这个方法移除列表中第一个出现的指定对象。如果列表不包含给定元素,则列表保持不变。如果成功从列表中移除了一个元素,则返回true,否则返回false。如果对象为null且列表不支持null元素,则会抛出NullPointerException异常。如果列表的实现不支持此方法,则会抛出UnsupportedOperationException异常。

接下来,让我们通过一些示例来具体了解remove()方法的用法。

从指定索引位置删除元素 (`E remove(int index)`)

这个例子将详细探讨E remove(int index)方法的使用。

List<String> list = new ArrayList<>();

list.add("A");
list.add("B");
list.add("C");
list.add("C");
list.add("B");
list.add("A");

System.out.println(list);

String removedStr = list.remove(1);
System.out.println(list);
System.out.println(removedStr);

首先,这段代码构建并打印了一个列表:

输出
[A, B, C, C, B, A]

然后,代码执行remove(1)来删除索引为1的元素。最后,它打印出新的列表结果,并打印出被移除的元素。

输出
[A, C, C, B, A]
B

可以看到,索引为1处的元素“B”已被成功移除。

2. 使用 `remove(int index)` 方法时出现越界异常

这是文章《如何使用Java List和ListArray中的remove()方法》的第2部分(共5部分)。

内容片段: 当索引超出列表范围时,本示例将探讨 `E remove(int index)` 方法的行为。

List<String> list = new ArrayList<>();

list.add("A");

String removedStr = list.remove(10);

这段代码创建了一个长度为1的列表。然而,当代码尝试移除索引为10的元素时,会发生以下情况:

输出
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index 10 out of bounds for length 1 at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64) at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70) at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:248) at java.base/java.util.Objects.checkIndex(Objects.java:372) at java.base/java.util.ArrayList.remove(ArrayList.java:535) at com.Olivia.java.ArrayListRemove.main(ArrayListRemove.java:19)

这个尝试抛出了 `IndexOutOfBoundsException` 异常。

3. 不可修改列表的 `remove()` 操作引发 `UnsupportedOperationException` 的示例

`List.of()` 方法创建的列表是不可变的,因此不能被修改。

List<String> list = List.of("a", "b");

System.out.println(list);

String removedStr = list.remove(1);

System.out.println(removedStr);

首先,此代码构建并打印一个不可变列表:

  1. 输出

[a, b]

 

然后代码尝试使用 remove() 方法来移除索引为1的元素。

  1. 线程 “main” 中发生异常 java.lang.UnsupportedOperationException
  2. 位于 java.base/java.util.ImmutableCollections.uoe(ImmutableCollections.java:142)
  3. 位于 java.base/java.util.ImmutableCollections$AbstractImmutableList.remove(ImmutableCollections.java:258)
  4. 位于 TestRemoveList.main(TestRemoveList.java:12)

 

这个尝试会抛出 UnsupportedOperationException 异常。如果你尝试使用 list.remove("a")list.remove("b") 也会抛出 UnsupportedOperationException 异常。

4. 从列表中移除一个对象

这是文章《如何使用Java List和ArrayList中的remove()方法》的第4部分(共5部分)。

本示例将深入探讨 boolean remove(Object o) 方法。

List<String> list = new ArrayList<>();

list.add("A");
list.add("B");
list.add("C");
list.add("C");
list.add("B");
list.add("A");

System.out.println(list);

boolean isRemoved = list.remove("C");
System.out.println(list);
System.out.println(isRemoved);

isRemoved = list.remove("X");
System.out.println(list);
System.out.println(isRemoved);

首先,这段代码构建并输出一个列表。

输出
[A, B, C, C, B, A]

接下来,这段代码执行 remove("C") 来删除第一个出现的 “C”。然后,它打印出结果列表,并打印操作的布尔值——true

输出
[A, B, C, B, A] true

然后,这段代码执行 remove("X"),但是列表中没有 “X” 这个实例,所以列表不会发生变化。最后,它打印出列表,并打印操作的布尔值——false

输出
[A, B, C, B, A] false

结论

本文为您详细讲解了Java List接口中的remove()方法。

推荐阅读:

参考文献:

bannerAds