避开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的坑。学习内容来自图灵--徐庶

相关推荐
银迢迢2 分钟前
java基础自用笔记:异常、泛型、集合框架(List、Set、Map)、Stream流
java·笔记
爱的叹息5 分钟前
java 设置操作系统编码、jvm平台编码和日志文件编码都为UTF-8的操作方式
java·开发语言·jvm
万亿少女的梦16832 分钟前
基于Ebay拍卖网站成交价格的影响因素分析
java·开发语言·网络安全
佩奇的技术笔记40 分钟前
初级:I/O与NIO面试题深度剖析
java·nio
鲁子狄41 分钟前
[笔记] SpringBoot3 使用 EasyExcel 封装工具类实现复杂 Excel 数据处理:使用Java构建高效的数据导入解决方案
java·后端
lingdian2343 分钟前
spring-security原理与应用系列:核心过滤器
java·后端·spring·安全管理·spring-security
ljh123321ljh44 分钟前
常见框架漏洞—Thinkphp
java·网络安全·中间件·tomcat·firefox
摇滚侠1 小时前
java -jar 指定spring配置文件
java·spring·jar
鲁子狄1 小时前
[笔记] SpringBoot3 使用 EasyExcel 封装工具类实现,自定义表头导出,并实现数据格式化转换与添加下拉框操作.
java·后端
今天又在摸鱼1 小时前
Spring Boot
java·数据库·spring boot