避开Arrays.asList使用的坑

devtools/2025/2/11 10:14:52/

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

 


http://www.ppmy.cn/devtools/157893.html

相关文章

如何使用 Redux 中间件?

在 Redux 中使用中间件的步骤如下: 1. 安装 Redux 和中间件 如果你还没有安装 Redux,可以通过以下命令安装: npm install redux如果你想使用 Redux-Thunk 或其他中间件,安装它们。例如,安装 Redux-Thunk: npm install redux-thunk2. 引入并应用中间件 在创建 Redux …

打家劫舍3

今天和打家讲一下打家劫舍3 题目&#xff1a; 题目链接&#xff1a;337. 打家劫舍 III - 力扣&#xff08;LeetCode&#xff09; 小偷又发现了一个新的可行窃的地区。这个地区只有一个入口&#xff0c;我们称之为root。 除了 root 之外&#xff0c;每栋房子有且只有一个“父“…

Axure设计教程:动态排名图(中继器实现)

一、开篇 在Axure原型设计中&#xff0c;动态图表是展示数据和交互效果的重要元素。今天&#xff0c;我们将学习如何使用中继器来创建一个动态的排名图&#xff0c;该图表不仅支持自动轮播&#xff0c;还可以手动切换&#xff0c;极大地增强了用户交互体验。此教程旨在提供一个…

USB子系统学习(四)用户态下使用libusb读取鼠标数据

文章目录 1、声明2、HID协议2.1、描述符2.2、鼠标数据格式 3、应用程序4、编译应用程序5、测试6、其它 1、声明 本文是在学习韦东山《驱动大全》USB子系统时&#xff0c;为梳理知识点和自己回看而记录&#xff0c;全部内容高度复制粘贴。 韦老师的《驱动大全》&#xff1a;商…

JVM 类加载子系统在干什么?

JVM 类加载子系统是什么&#xff1f; 类加载子系统&#xff08;Class Loader Subsystem&#xff09;是 JVM 负责 加载、链接和初始化 .class 文件的组件。它的主要作用是将字节码文件加载进 JVM 并准备执行。 类加载器&#xff08;ClassLoader&#xff09;是 字节码的搬运工&…

【数据结构】(7) 栈和队列

一、栈 Stack 1、什么是栈 栈是一种特殊的线性表&#xff0c;它只能在固定的一端&#xff08;栈顶&#xff09;进行出栈、压栈操作&#xff0c;具有后进先出的特点。 2、栈概念的例题 答案为 C&#xff0c;以C为例进行讲解&#xff1a; 第一个出栈的是3&#xff0c;那么 1、…

IDEA中列举的是否是SpringBoot的依赖项的全部?在哪里能查到所有依赖项,如何开发自己的依赖项让别人使用

在 IntelliJ IDEA 中列举的依赖项并不一定是 Spring Boot 项目的全部依赖项。IDEA 通常只显示你在 pom.xml&#xff08;Maven&#xff09;或 build.gradle&#xff08;Gradle&#xff09;中显式声明的依赖项&#xff0c;而这些依赖项本身可能还会引入其他传递性依赖。 1. 如何…

人工智能浪潮下脑力劳动的变革与重塑:挑战、机遇与应对策略

一、引言 1.1 研究背景与意义 近年来&#xff0c;人工智能技术发展迅猛&#xff0c;已成为全球科技领域的焦点。从图像识别、语音识别到自然语言处理&#xff0c;从智能家居、智能交通到智能医疗&#xff0c;人工智能技术的应用几乎涵盖了我们生活的方方面面&#xff0c;给人…