电话
400 9058 355
Arrays.asList()返回的是不可变的内部类ArrayList,不支持add/remove等操作,调用会抛出UnsupportedOperationException;基本类型数组需用Stream或Guava转换;集合转数组应使用toArray(T[] a)避免ClassCastException。
Arrays.asList() 返回的不是 java.util.ArrayList,而是 Arrays 的静态内部类 ArrayList(注意:和 java.util.ArrayList 同名但不同类)。它底层直接引用原始数组,不支持 add()、remove()、clear 等结构性修改操作,调用会抛出 
UnsupportedOperationException。
常见错误现象:
String[] arr = {"a", "b"};
List list = Arrays.asList(arr);
list.add("c"); // 运行时抛出 UnsupportedOperationException
new ArrayList(Arrays.asList(arr))
int[])无效——它会把整个数组当做一个元素,返回 List,而非 List
null 会导致 NullPointerException
Java 泛型不支持基本类型,所以 int[]、double[] 等无法直接用 Arrays.asList() 转成 List。必须手动装箱或借助工具类。
int[] arr = {1, 2, 3};
List list = Arrays.stream(arr).boxed().collect(Collectors.toList()); Lists.newArrayList(Ints.asList(arr))(需引入 com.google.guava:guava)Listlist = new ArrayList<>(); for (int i : arr) list.add(i);
注意:Ints.asList(arr) 返回的是 List 视图,仍不可增删;要可变请再套一层 new ArrayList()。
List.toArray() 有两个重载:Object[] toArray() 和 T[] toArray(T[] a)。后者才能保留类型信息,否则强转会触发 ClassCastException。
错误写法:
Listlist = Arrays.asList("x", "y"); String[] arr = (String[]) list.toArray(); // 运行时 ClassCastException
String[] arr = list.toArray(new String[0]);(传入空数组,JVM 自动推导类型)new String[1]),JVM 会新建一个合适大小的同类型数组返回new String[10]),多余位置会被设为 null,且返回的就是该数组本身如果只是需要「只读视图」避免误改,又不想复制数据,Collections.unmodifiableList(Arrays.asList(arr)) 比新建 ArrayList 更轻量。
add、set、clear)都会立即抛出 UnsupportedOperationException
new ArrayList(Arrays.asList(Arrays.copyOf(arr, arr.length)))
真正容易被忽略的是:unmodifiableList 包装的仍是原始数组引用,不是防御性副本。
邮箱:8955556@qq.com
Q Q:8955556
本文详解如何将Go官方present工具(用于生成HTML5...
PySNMP在不同版本中对SNMP错误状态(errorSta...
time.Sleep仅阻塞当前goroutine,其他gor...
PHPfopen()创建含特殊符号的文件名失败主因是操作系统...
WooCommerce中通过代码为分组产品动态聚合子商品的属...
io.ReadFull返回io.ErrUnexpectedE...
本文详解Yii2中控制器向视图传递ActiveRecord数...
本文详解为何通过wp_set_object_terms()为...
Pytest中使用@mock.patch类装饰器会导致补丁泄...
带缓冲的channel是并发安全的FIFO队列;make(c...