大家好,我是三叔,很高兴这期又和大家见面了,一个奋斗在互联网的打工人。
Arrays.asList()
数组转List的操作大家肯定都用到过:Arrays.asList()可以将数组对象转换成list。
public static void main(String[] args) {
int[] array = {1, 2, 3, 4};
List<Integer> newList = Arrays.asList(array[1], array[3]);
System.out.println(newList);
}
打印如下:
Arrays.asList() 是一个用于将数组转换为 List 的方法。但是需要注意的是,Arrays.asList() 返回的是一个固定大小的列表,它的大小是根据传入的数组确定的。因此,尝试对返回的列表进行添加或删除元素的操作会导致java.lang.UnsupportedOperationException 异常。
public static void main(String[] args) {
int[] array = {1, 2, 3, 4};
List<Integer> newList = Arrays.asList(array[1], array[3]);
newList.add(1);// 会导致UnsupportedOperationException 异常
}
如图所示:
UnsupportedOperationException原因
Arrays.asList() 返回的列表类型是 java.util.Arrays.ArrayList,而不是 java.util.ArrayList。java.util.Arrays.ArrayList 是一个内部类,继承自 AbstractList,它并没有实现 add() 和 remove() 方法,而是继承了 AbstractList 中的默认实现,这些默认实现会抛出 UnsupportedOperationException 异常。
如何解决
为了解决这个问题,我们可以通过创建一个新的可变列表并将Arrays.asList() 的结果复制到新列表中,以便对新列表进行任意的添加和删除操作。
public static void main(String[] args) {
int[] array = {1, 2, 3, 4};
// List<Integer> arrayList = Arrays.asList(array[1], array[3]);
List<Integer> list = new ArrayList<>();
list.add(array[1]);
list.add(array[3]);
list.add(2023);
System.out.println(list);
}
打印如下: