当前位置: 首页 > article >正文

避开Arrays.asList使用的坑

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

    /**
     * 坑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:会把集合整个作为对象存储

 

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

 测试

输出数组对象

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

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

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

 

    /**
     * 坑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);
        }
    }

 测试

改变原数组对象

 正确写法

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

 


http://www.kler.cn/a/540158.html

相关文章:

  • 推荐一款 免费的SSL,自动续期
  • iOS AES/CBC/CTR加解密以及AES-CMAC
  • 学习总结二十九
  • Expo运行模拟器失败错误解决(xcrun simctl )
  • C语言基础第04天:数据的输出和输出
  • 【C++】命名空间
  • SAP ABAP调用DeepSeek API大模型接口
  • git实现回退
  • 让office集成deepseek,支持office和WPS办公软件!(体验感受)
  • 进阶数据结构——单调栈
  • 【JVM详解三】垃圾回收机制
  • 嵌入式硬件篇---OpenMV的硬件流和软件流
  • 使用Chisel建立端口转发与SOCKS5代理隧道
  • [含文档+PPT+源码等]精品大数据项目-Django基于大数据实现的心血管疾病分析系统
  • 使用OpenGL自己定义一个button,响应鼠标消息:掠过、点击、拖动
  • 深度学习-利用预训练的 ResNet 和 DenseNet 模型进行医学影像诊断
  • HiveQL命令(二)- 数据表操作
  • 自动驾驶数据集三剑客:nuScenes、nuImages 与 nuPlan 的技术矩阵与生态协同
  • [LVGL] 在VC_MFC中移植LVGL
  • linux基础命令1
  • 【紫光同创PG2L100H开发板】盘古676系列,盘古100Pro+开发板,MES2L676-100HP
  • Layui树节点添加level属性
  • 【Linux】31.Linux 多线程(5)
  • Python+Flask搭建属于自己的B站,管理自己电脑里面的视频文件。支持对文件分类、重命名、删除等操作。
  • 日志统计(acWing,蓝桥杯)
  • PLSQL: 存储过程,用户自定义函数[oracle]