返回

Arrays.asList() 方法使用时报 UnsupportedOperationException 异常错误:原因及解决办法

后端

  1. 问题

在 Java 中,Arrays.asList() 方法可以将一个数组转换为一个列表。但是,如果尝试对这个列表进行修改操作,就会抛出 UnsupportedOperationException 异常。这是因为 Arrays.asList() 方法返回的列表是一个不可变列表,这意味着它不能被修改。

2. 错误原因

UnsupportedOperationException 异常表示尝试对一个不支持的操作进行调用。在 Arrays.asList() 的情况下,这意味着尝试修改一个不可变列表。这是因为 Arrays.asList() 方法实际上并没有创建一个新的列表,而是直接将数组包装成一个列表。因此,对这个列表进行修改操作实际上就是对数组进行修改操作,这显然是不允许的。

3. 解决办法

为了避免 UnsupportedOperationException 异常,有以下几种解决办法:

  • 使用 ArrayList

可以使用 ArrayList 来代替 Arrays.asList() 方法。ArrayList 是一个可变列表,因此可以进行修改操作。

int[] array = {1, 2, 3, 4, 5};
List<Integer> list = new ArrayList<>(array.length);
for (int i = 0; i < array.length; i++) {
    list.add(array[i]);
}
  • 使用 Arrays.copyOf()

可以使用 Arrays.copyOf() 方法来创建一个新的数组,然后将这个数组转换为一个列表。

int[] array = {1, 2, 3, 4, 5};
int[] copy = Arrays.copyOf(array, array.length);
List<Integer> list = Arrays.asList(copy);
  • 使用 Guava 库

可以使用 Guava 库中的 Lists.newArrayList() 方法来创建一个新的列表。

import com.google.common.collect.Lists;

int[] array = {1, 2, 3, 4, 5};
List<Integer> list = Lists.newArrayList(array);

4. 结论

Arrays.asList() 方法返回的列表是一个不可变列表,这意味着它不能被修改。如果尝试对这个列表进行修改操作,就会抛出 UnsupportedOperationException 异常。为了避免此错误,可以使用 ArrayList、Arrays.copyOf() 或 Guava 库中的 Lists.newArrayList() 方法来创建一个新的列表。