Arrays.asList添加元素报java.lang.UnsupportedOperationException

2023-12-21 06:26:32

问题现象

java.lang.UnsupportedOperationException
at java.util.AbstractList.add(AbstractList.java:148)
at java.util.AbstractList.add(AbstractList.java:108)
at com.yxxmg.collection.CollectionTest.test(CollectionTest.java:21)

*在这里插入图片描述*

问题分析

先分析下Arrays.asList,java.util.Arrays#asList

 @SafeVarargs
 @SuppressWarnings("varargs")
 public static <T> List<T> asList(T... a) {
     return new ArrayList<>(a);
 }
 private final E[] a;

 ArrayList(E[] array) {
     a = Objects.requireNonNull(array);
 }
  public boolean add(E e) {
      add(size(), e);
      return true;
  }
  public void add(int index, E element) {
    throw new UnsupportedOperationException();
 }

由此可以看出asList其实就是就是一个定长数组且不能被修改,类似apache commons-collections中的Collections.unmodifiableList()

解决方案

1.使用GuavaLists
在这里插入图片描述
2.使用Stream.of()操作
在这里插入图片描述3.使用Arrays.stream()
在这里插入图片描述4.使用new ArrayList<>(Collection<? extends E> c)
在这里插入图片描述

示例代码

https://gitee.com/youxiaxiaomage/java-practices/blob/master/yxxmg-java-helper/src/test/java/com/yxxmg/collection/CollectionTest.java

文章来源:https://blog.csdn.net/youxiaxiaomage/article/details/135066719
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。