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

Java——踩坑Arrays.asList()

  1. 坑1:不能直接使用 Arrsys.asList() 来转换基本类型数据
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());}

输出结果:

list:[[I@27f8302d] size:1 class:class [I

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

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

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

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());}
list:[1, 2, 3] size:3 class:class java.lang.Integer
  1. 坑2:Arrays.asList() 返回到List不支持增删操作
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.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给他

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
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);}

输出结果:

arr:[0, 2, 3], list:[0, 2, 3]

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

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);}
arr:[0, 2, 3], list:[1, 2, 3]
http://www.lryc.cn/news/431871.html

相关文章:

  • 前缀列表(ip-prefix)配置
  • 每日OJ_牛客_电话号码(简单哈希模拟)
  • 鸿蒙轻内核M核源码分析系列十二 事件Event
  • 基于 RocketMQ 的云原生 MQTT 消息引擎设计
  • AWVS/Acunetix Premium V24.8
  • [数据集][目标检测]灭火器检测数据集VOC+YOLO格式3255张1类别
  • 【技术警报】Redis故障启示录:当主节点宕机,如何避免数据“雪崩”?
  • 【基础】Three.js加载纹理贴图、加载外部gltf格式文件
  • 【区块链 + 人才服务】FISCO BCOS 区块链实训和管理平台 | FISCO BCOS应用案例
  • 联众优车持续加大汽车金融服务投入与创新,赋能汽车消费新生态
  • 基于yolov8的西红柿检测系统python源码+onnx模型+评估指标曲线+精美GUI界面
  • PHP轻量级高性能HTTP服务框架 - webman
  • Python实现人工鱼群算法
  • 【网络安全】密码学概述
  • Java连接SSH
  • 怎么取消MAC 输入首字母总是自动变大写
  • 【无损检测】基于用深度学习的工业超声B-Scan 图像中的焊缝缺陷
  • iOS——GCD再学习
  • SVD降维
  • 剖析Cookie的工作原理及其安全风险
  • 规控面试复盘
  • Elastic Stack--ES集群加密及Kibana的RBAC实战
  • 【开源免费】基于SpringBoot+Vue.JS图书个性化推荐系统(JAVA毕业设计)
  • STM32(F103ZET6)第十九课:FreeRtos的移植和使用
  • 索尼的Web3蓝图:从技术创新到现实应用的全方位布局
  • 探索Java中的分布式消息队列与事件总线:架构、实现与最佳实践
  • HTML零基础教程(超详细)
  • 011.Python爬虫系列_bs4解析
  • django摄影竞赛小程序论文源码调试讲解
  • Unity-OpenCV-Imgproc函数概览