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

相关推荐
你不是我我17 小时前
【Java 开发日记】HTTP3 性能更好,为什么内网微服务依然多用 HTTP2?HTTP2 内网优势是什么?
java·开发语言·微服务
雪碧聊技术18 小时前
大模型爆火!Java后端如何抓住Agent全栈开发的风口
java·大模型·agent·全栈开发
逻辑驱动的ken19 小时前
Java高频面试场景题25
java·开发语言·深度学习·面试·职场和发展
AI人工智能+电脑小能手20 小时前
【大白话说Java面试题】【Java基础篇】第32题:Java的异常处理机制是什么
java·开发语言·后端·面试
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ21 小时前
通过java后端代码来实现给word内容补充格式文本内容控件,以及 设置控件的标记和标题
java·c#·word
無限進步D1 天前
Java 面向对象高级 接口
java·开发语言
逸Y 仙X1 天前
文章二十七:ElasticSearch ES查询模板(Search Template)高效复用实战
java·大数据·数据库·elasticsearch·搜索引擎·全文检索
二哈赛车手1 天前
新人笔记---Spring AI的Advisor以及其底层机制讲解(涉及源码),包含一些遇见的Spring AI的Advisor缺陷问题的解决方案
java·人工智能·spring boot·笔记·spring
AC赳赳老秦1 天前
接口测试自动化:用 OpenClaw 对接 Postman,实现批量回归测试、测试报告自动生成与推送
java·人工智能·python·算法·elasticsearch·deepseek·openclaw