Java——踩坑Arrays.asList()

news/2024/9/23 9:19:36/
  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/news/1523819.html

相关文章

理解 RabbitMQ:生产者、连接、通道、交换机、队列与消费者的消息流

在分布式消息系统中&#xff0c;RabbitMQ 是一个非常流行的消息代理。它的核心理念是解耦应用程序的生产者和消费者&#xff0c;使得消息能够可靠地从一方传递到另一方。本文将带你深入了解 RabbitMQ 中 生产者、连接、通道、交换机、队列 和 消费者 之间的消息流&#xff0c;并…

Agent探索之OpenAI方式调用本地模型(one-api)

介绍 https://github.com/songquanpeng/one-api OpenAI 接口管理 & 分发系统&#xff0c;支持 Azure、Anthropic Claude、Google PaLM 2 & Gemini、智谱 ChatGLM、百度文心一言、讯飞星火认知、阿里通义千问、360 智脑以及腾讯混元&#xff0c;可用于二次分发管理 key&…

0910作业+思维导图

一、作业&#xff08;实现一个闹钟) 1、代码 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//调整标签页大小this->resize(800,400);//lab:显示系统时间…

《C++》解密--算法复杂度

要正式开通C博客之路啦&#xff01;&#xff01; 一、数据结构 1、数据结构定义 数据结构 是计算机存储、组织数据的方式&#xff0c;指相互之间存在一种或多种特定关系的数据元 素的集合。 2、算法定义 算法 就是定义良好的计算过程&#xff0c;他取一个或一组的值为…

2024年录屏神器大盘点,轻松捕捉屏幕精彩

现在讲解一些操作越来越便捷了&#xff0c;我 一般都是用录屏工具来边录制操作边讲解&#xff0c;这样可以更方便对方了解操作步骤。这次我就分享几款免费录屏工具一起来试试吧。 1.福晰录屏软件 链接&#xff1a;www.foxitsoftware.cn/REC/ 对于初次尝试录屏的新手来说&…

JavaScript进阶day2

目录 1.深入对象 1.1 创建对象三种方式 1.2 构造函数 1.2.1 基本语法 1.2.2 实例化执行过程 1.3 实例成员&静态成员 1.4 小结 2.内置构造函数 2.1 Object 2.1.1 Object.keys 2.1.2 Object.values 2.1.3 Object. assign对象拷贝 2.2 Array 2.2.1 Array.reduce 2.2.2 案例 2.…

测试过程中的不同版本含义

目录 金丝雀版本 开发版本 测试版本 beta或发布版本 在我们测试过程中&#xff0c;会遇到不同的版本&#xff0c;每个版本的含义却不一样。 金丝雀版本 这是每日都要构建的版本&#xff0c;用来排除过滤一些明显不适宜的版本。就像煤矿井里的金丝雀(译注&#xff1a;17世…

大模型系列-fastgpt,ollama搭建本地知识库

大模型系列-fastgpt,ollama搭建本地知识库 1. 安装fastgpt,oneapi2. 安装ollama运行大模型2.1. 安装ollama2.2. ollama下载模型 1. 安装fastgpt,oneapi docker-compose安装 下载docker-compose.yml,config.json mkdir fastgpt cd fastgpt curl -O https://raw.githubusercon…