Java List与ArrayList:深入解析remove()方法的使用与注意事项
Java List `remove()` 方法简介
Java的List
接口中的remove()
方法用于从列表中移除元素。ArrayList
是List
接口最常用的实现类,因此本文中的示例将主要使用ArrayList
的remove()
方法。
Java List 的 `remove()` 方法详解
从列表中删除元素主要有两种remove()
方法:
E remove(int index)
: 这个方法移除指定索引位置的元素并返回该元素。随后的元素会向左移动一个位置。如果指定的索引超出范围(即小于0或大于等于列表大小),则会抛出IndexOutOfBoundsException
异常。如果列表的实现不支持此操作,则会抛出UnsupportedOperationException
异常。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);
首先,此代码构建并打印一个不可变列表:
-
输出
[a, b]
然后代码尝试使用 remove()
方法来移除索引为1的元素。
- 线程 “main” 中发生异常
java.lang.UnsupportedOperationException
- 位于
java.base/java.util.ImmutableCollections.uoe(ImmutableCollections.java:142)
- 位于
java.base/java.util.ImmutableCollections$AbstractImmutableList.remove(ImmutableCollections.java:258)
- 位于
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()
方法。