Arrays.asList()创建的集合不能使用remove函数
创始人
2024-11-19 13:36:53

【电子书大全】内含上千本顶级编程书籍,是程序员必备的电子书资源包,并且会不断地更新,现免费分享给大家,助你在编程的道路上更上一层楼!

链接: https://pan.baidu.com/s/1yhPJ9LmS_z5TdgIgxs9NvQ?pwd=yyds > 提取码: yyds

Arrays.asList() 创建的集合确实不能直接使用 remove 方法,这是因为该方法返回的集合是一个固定大小的列表,背后由一个数组支持。由于数组的长度是固定的,所以这个列表也不能增加或减少元素。

以下是详细解释和解决方案:

原因

Arrays.asList() 返回的是一个内部类 java.util.Arrays.ArrayList 的实例,它是一个固定大小的列表,不支持添加或删除元素操作。尝试调用 remove 方法会抛出 UnsupportedOperationException

List list = Arrays.asList("a", "b", "c"); list.remove("a"); // 抛出 UnsupportedOperationException 

解决方案

如果需要一个可以自由增删元素的列表,可以将 Arrays.asList() 返回的固定大小列表转换成一个可变的列表,例如 ArrayList

1. 使用 ArrayList 构造函数
List list = new ArrayList<>(Arrays.asList("a", "b", "c")); list.remove("a"); // 成功 
2. 使用 Collections.addAll()
List list = new ArrayList<>(); Collections.addAll(list, "a", "b", "c"); list.remove("a"); // 成功 
3. 使用 Stream API(Java 8 及以上)
List list = Arrays.stream(new String[]{"a", "b", "c"})                           .collect(Collectors.toCollection(ArrayList::new)); list.remove("a"); // 成功 

示例代码

以下是一个完整的示例,展示如何将 Arrays.asList() 返回的固定大小列表转换为一个可变的列表,然后进行删除操作:

import java.util.Arrays; import java.util.ArrayList; import java.util.List; import java.util.Collections; import java.util.stream.Collectors;  public class Main {     public static void main(String[] args) {         // 使用 Arrays.asList() 创建固定大小的列表         List fixedList = Arrays.asList("a", "b", "c");          // 方法1:使用 ArrayList 构造函数         List mutableList1 = new ArrayList<>(fixedList);         mutableList1.remove("a");         System.out.println(mutableList1); // 输出: [b, c]          // 方法2:使用 Collections.addAll()         List mutableList2 = new ArrayList<>();         Collections.addAll(mutableList2, "a", "b", "c");         mutableList2.remove("a");         System.out.println(mutableList2); // 输出: [b, c]          // 方法3:使用 Stream API         List mutableList3 = Arrays.stream(new String[]{"a", "b", "c"})                                           .collect(Collectors.toCollection(ArrayList::new));         mutableList3.remove("a");         System.out.println(mutableList3); // 输出: [b, c]     } } 

通过这些方法,你可以创建一个可以自由增删元素的列表,并且安全地使用 remove 方法。

相关内容

热门资讯

刚刚,Claude最新功能泄露... 新智元报道 编辑:定慧 大卫 【新智元导读】2026年5月4日,testingcatalog在An...
高分辨大宽带集成光子光谱仪成功... 麦姆斯咨询获悉,近日,中国科学院南京天文光学技术研究所天文光子学团队在面向天文观测的高分辨大宽带集成...
性价比高又稳定的云手机哪个好?... 作为搬了4年砖、踩过无数云手机坑的老玩家,今天直接给你们唠唠性价比高又稳定的云手机选法,全是实战干货...
以灵石破局,万物云参编国内首部... 4月23日,由低碳智慧建筑产业技术创新战略联盟与北京清华同衡规划设计研究院有限公司主办、万物云作为协...
专访 | CLA成功反哺全球 ... 2026年,是奔驰诞生的140周年,也是奔驰进入中国内地市场的20周年。 140年间,从第一款汽车问...