Arrays.asList()返回的List是固定大小的,不支持add、remove、clear等结构性修改操作,因其底层是Arrays的私有内部类,直接包装原数组且无扩容机制;仅支持set、get、size等读写或只读操作;需可变列表时应转为new ArrayList<>(list)。

通过 Arrays.asList() 创建的 List 是固定大小的,**不支持 add、remove、clear 等结构性修改操作**,但允许修改已有元素的值(即 set 操作)。
为什么不能添加或删除元素?
Arrays.asList() 返回的是 Arrays 类的一个私有静态内部类 ArrayList(注意:不是 java.util.ArrayList),它直接包装原始数组,没有扩容机制。调用 add()、remove() 会抛出 UnsupportedOperationException。
哪些操作是安全的?
以下操作可以正常执行:
- set(index, element):替换指定位置的元素(底层直接修改原数组)
- get(index):获取元素
- size()、contains()、indexOf() 等只读方法
如何实现真正的可变列表?
如果需要增删元素,应将 Arrays.asList() 的结果转为真正的 java.util.ArrayList:
String[] arr = {"a", "b", "c"};
List<String> fixedList = Arrays.asList(arr); // 固定大小
// ✅ 转为可变列表
List<String> mutableList = new ArrayList<>(fixedList);
mutableList.add("d"); // 成功
mutableList.remove(0); // 成功
注意事项
即使转成 ArrayList,也要注意原数组是否被共享:
- 若原数组后续被修改,
Arrays.asList()返回的列表会同步反映变化(因为共用同一数组) - 而新创建的
ArrayList是独立副本,修改它不会影响原数组

















