Java——踩坑Arrays.asList()

embedded/2024/9/24 6:28:47/
  1. 坑1:不能直接使用 Arrsys.asList() 来转换基本类型数据
java">public static void test1(){// 1、不能直接使用asList来转换基本类型数组int[] arr = {1, 2, 3};List list = Arrays.asList(arr);System.out.printf("list:%s size:%s class:%s", list, list.size(), list.get(0).getClass());}

输出结果:

java">list:[[I@27f8302d] size:1 class:class [I

原因:
查看源码可以看到,接收入参为泛型,而基本类型并没有集成Object

java">@SafeVarargs@SuppressWarnings("varargs")public static <T> List<T> asList(T... a) {return new ArrayList<>(a);}

解决方法:
进行装箱或者直接使用包装类型

java">public static void test1(){// 1、不能直接使用asList来转换基本类型数组Integer[] arr = {1, 2, 3};List list = Arrays.asList(arr);System.out.printf("list:%s size:%s class:%s", list, list.size(), list.get(0).getClass());}
java">list:[1, 2, 3] size:3 class:class java.lang.Integer
  1. 坑2:Arrays.asList() 返回到List不支持增删操作
java">public static void test2(){String[] arr = {"1", "2", "3"};List list = Arrays.asList(arr);try {list.add("4");} catch (Exception e){e.printStackTrace();}System.out.printf("arr:%s, list:%s", Arrays.toString(arr), list);}

输出结果:
报了不支持的操作异常

java">java.lang.UnsupportedOperationExceptionat java.util.AbstractList.add(AbstractList.java:148)at java.util.AbstractList.add(AbstractList.java:108)at com.ooamo.test.AsListTest.test2(AsListTest.java:25)at com.ooamo.test.AsListTest.main(AsListTest.java:11)
arr:[1, 2, 3], list:[1, 2, 3]

原因:
查看源码可以看到,asList返回到ArrayList是一个内部类,继承了AbstractList,再查看源码,并没有是哪set,add,remove方法
请添加图片描述
请添加图片描述
解决方法:
asList之后new一个List给他

java">public static void test2(){String[] arr = {"1", "2", "3"};List list = new ArrayList(Arrays.asList(arr));try {list.add("4");} catch (Exception e){e.printStackTrace();}System.out.printf("arr:%s, list:%s", Arrays.toString(arr), list);}
  1. 坑3:对原数组的修改会影响 Arrays.asList() 返回的那个List
java">public static void test3(){String[] arr = {"1", "2", "3"};List list = Arrays.asList(arr);arr[0] = "0";System.out.printf("arr:%s, list:%s", Arrays.toString(arr), list);}

输出结果:

java">arr:[0, 2, 3], list:[0, 2, 3]

原因:
两者为同个引用
解决方法:
new一个新的List

java">public static void test3(){String[] arr = {"1", "2", "3"};List list = new ArrayList(Arrays.asList(arr));arr[0] = "0";System.out.printf("arr:%s, list:%s", Arrays.toString(arr), list);}
java">arr:[0, 2, 3], list:[1, 2, 3]

http://www.ppmy.cn/embedded/109925.html

相关文章

Docker Elasticsearch安装ik分词插件教程

本章教程在通过Docker 安装Elasticsearch,并安装ik分词插件。本文的重点是安装ik分词插件。 一、安装Elasticsearch 安装教程以前写过,参考:https://blog.csdn.net/qq_19309473/article/details/140725121 安装之后,通过http://ip:9200,可以访问,就表示安装成功。 二、安装…

【专题】2024年8月中国企业跨境、出海、国际化、全球化行业报告汇总PDF合集分享(附原数据表)

原文链接&#xff1a; https://tecdat.cn/?p37584 在全球化浪潮汹涌澎湃的当下&#xff0c;中国企业积极探索海外市场&#xff0c;开启了出海跨境的新征程。本报告合集旨在全面梳理出海跨境全球化行业的发展态势&#xff0c;涵盖多个领域的深度洞察。 从游戏、快消品、医疗器…

大学生必看干货!分享5款ai写毕业论文软件

在当今数字化时代&#xff0c;AI写作工具已经成为大学生撰写毕业论文的重要辅助手段。这些工具不仅能够提高写作效率&#xff0c;还能帮助学生生成高质量的文稿。以下是五款备受推荐的AI写毕业论文软件&#xff0c;其中特别推荐千笔-AIPassPaper。 ### 1. 千笔-AIPassPaper 传…

[C++#33][异常] 错误码 | 抛出与捕获 | 异常安全 | 异常体系

目录 C语言与C错误处理方式的对比及应用 一、C语言传统的错误处理方式 1. 终止程序&#xff1a;assert 2. 返回错误码 缺点&#xff1a; 二、C中的异常处理机制 1. 基本概念 2. 异常的抛出与捕获 3. 异常的重新抛出 三、C中的异常安全 1. 构造函数与析构函数的异常 …

Java证书信息收集

1.Java二级 【NCRE 二级Java语言程序设计02】考试流程及二级Java大纲_java语言程序设计计算机二级-CSDN博客

Spring 源码解读:使用FactoryBean创建复杂对象的实现

引言 在Spring框架中&#xff0c;FactoryBean是一个特殊的Bean&#xff0c;它允许开发者通过实现FactoryBean接口来控制Bean的创建过程&#xff0c;特别适用于创建复杂对象。FactoryBean可以将复杂对象的创建逻辑与业务逻辑分离&#xff0c;提供更高的灵活性和可扩展性。在本篇…

【数组与广义表】(基本概念与思路)

1.数组的定义及特点 数组&#xff1a;按一定格式排列起来的&#xff0c;具有相同类型的数据元素的集合。 1.1一维数组 若线性表中的数据元素为非结构的简单元素&#xff0c;则称为一维数组。一维数组的逻辑结构:线性结构&#xff0c;定长的线性表声明格式:数据类型 变量名称…

数据看板多端查看无压力,教你轻松设置响应式布局

最近&#xff0c;山海鲸可视化新增了一个非常实用的功能&#xff0c;叫作“响应式布局”。今天我来为大家介绍一下这个新功能以及它如何提升我们在不同设备上的使用体验。 你可能在用手机浏览网页时注意到&#xff0c;有些网站在手机和电脑上的显示方式几乎相同。然而&#xff…