避开Arrays.asList使用的坑

坑1:不能对Arrays.asList返回的list进行增删操作

java 复制代码
    /**
     * 坑1:不能对Arrays.asList返回的list进行增删操作
     * @param args
     */
    public static void main1(String[] args) {
        String[] arr = new String[]{"a", "b", "c"};
        List<String> list = Arrays.asList(arr);
        // 集合元素不能新增
        try {
            list.add("s");
        } catch (Exception e) {
            System.out.println("不能新增, class: " + e.getClass() + " errorMssg: " + e.getMessage());
        }

        try {
            // 集合元素不能删除
            list.remove("a");
        } catch (Exception e) {
            System.out.println("不能删除, case: " + e.getClass() + " errorMssg:" + e.getMessage());
        }
        
        // 可以修改集合元素
        list.set(0, "s");
        System.out.println("修改成功!");
    }

测试

坑2:会把集合整个作为对象存储

java 复制代码
    /**
     * 坑2:会把集合整个作为对象存储
     * @param args
     */
    public static List main2(String[] args) {
        int[] arr = new int[]{1, 2, 3};
        List list = Arrays.asList(arr);
        return list;
    }

测试

输出数组对象

针对这一现象,只需要将int转为封装类型即可

java 复制代码
    /**
     * 坑2之填坑法
     */
    public static List main2_1(String[] args) {
        Integer[] arr = new Integer[]{1, 2, 3};
        List list = Arrays.asList(arr);
        return list;
    }

坑3:修改元素,会同时修改原集合的元素

java 复制代码
    /**
     * 坑3:修改元素,会同时修改原集合的元素
     * @param args
     */
    public static void main3(String[] args) {
        String[] arr = new String[]{"a", "b", "c"};
        List<String> list = Arrays.asList(arr);
        list.set(0, "s");
        for (String s : arr) {
            System.out.println(s);
        }
    }

测试

改变原数组对象

正确写法

java 复制代码
    /**
     * 对坑3的填坑法
     */
    public static void main3_1(String[] args) {
        String[] arr = new String[]{"a", "b", "c"};
        List<String> list = new ArrayList<>(Arrays.asList(arr));
        list.set(0, "s");
        for (String s : arr) {
            System.out.println(s);
        }
    }

测试

注:测试Arrays.asList的坑。学习内容来自图灵--徐庶

相关推荐
Amour恋空几秒前
SpringBoot使用SpringAi完成简单智能助手2.0
java·spring boot·后端
额1292 分钟前
Ubuntu 反向代理/负载均衡 centos7/8 tomcat服务更改
java·centos·tomcat
ywlovecjy2 分钟前
Spring Boot中的404错误:原因、影响及处理策略
java·spring boot·后端
tuokuac4 分钟前
Spring Boot约定大于配置(配置MQ消息转换器的具体实例)
java·后端·spring
wuqingshun3141594 分钟前
说一下Spring中的ApplicationContext和BeanFactory的区别?
java·后端·spring
wyazyf5 分钟前
TREA IDE运行java springboot项目
java·spring boot·trea ide 启动java
星月昭铭8 分钟前
一次全表审核“卡99%”故障排查:空字符串在while循环中引发的性能陷阱
java
jessecyj9 分钟前
Windows操作系统部署Tomcat详细讲解
java
摇滚侠9 分钟前
Redis 怎么用,Java 开发,Redis 怎么用
java·数据库·redis
木井巳10 分钟前
【递归算法】全排列 Ⅱ
java·算法·leetcode·决策树·深度优先·剪枝