首页 > 其他分享 >使用Arrays.asList()的坑

使用Arrays.asList()的坑

时间:2024-05-11 16:41:06浏览次数:13  
标签:Arrays ArrayList list add 数组 使用 asList

  1. 背景

    在将数组转为list的时候,一般会使用到Arrays.asList()这个方法,但是在对转化后的list进行add操作的时候出现了java.lang.UnsupportedOperationException的报错

  2. 原因

    Arrays.asList()方法只是将数组转换为一个固定长度的列表,它不支持增删操作。研究源码发现,它生成的ArrayList表面上看是 java.util.ArrayList,实际上是Arrays的内部类ArrayList 。它们的父类都是AbstractList,但是内部类的ArrayList是没有重写父类的add跟remove方法的。恰巧父类的add跟remove方法是直接抛出UnsupportedOperationException异常的,所以在使用该方法后再去add的时候就会报java.lang.UnsupportedOperationException了

    1. 解决方法及拓展

    解决方法:将其再转化一次,即为List list = new ArrayList<>(Arrays.asList(array));这样就是一个标准的ArrayList了。

    拓展:Arrays.asList() 方法不能直接用于基本类型数组,因为泛型不支持基本类型。如果尝试将基本类型数组作为参数传递给 Arrays.asList(),它会将整个基本类型数组视为单个对象来处理

    int[] array = {1, 2, 3};
    List<int[]> list = Arrays.asList(array);
    
    System.out.println(list.size());       // 这里是把这个int类型的数组作为泛型,故输出 1
    System.out.println(list.get(0)[0]);    // 抛出 ArrayIndexOutOfBoundsException

    解决办法是手动将基本类型数组转换为对应的包装类型,然后再使用,即List<Integer> list = Arrays.asList(array);

     

标签:Arrays,ArrayList,list,add,数组,使用,asList
From: https://www.cnblogs.com/shitechnology/p/18186751

相关文章

  • 线程安全队列(使用互斥锁进行实现)
    线程安全队列(使用互斥锁进行实现)没有设置队列上限的线程安全队列只需要采取一个std::condition_variable变量,用于处理队列为空的情况以下是示例代码,涉及了std::mutex和std::condition_variable、std::unique_lock、std::lockguard等多线程交互的类。测试方式采取的是3个生成者......
  • 使用IDEA创建编写代码
    使用IDEA创建编写代码创建空项目文件夹选择EmptyProject为工程文件夹命名选择文件夹创建路径点击Create创建Java工程模块点击File->New->Module...选择Java,为工程文件命名,选择路径,点击Create。项目结构选择点击File->ProjectStructure...SDK选择自己......
  • springboot使用log4j监控日志发送邮件
    实现log4j发送邮件功能大致流程:1、开启邮箱SMTP服务,获取SMTP登录密码2、引入javax.mail、javax.activation依赖3、配置log4j文件,指定邮件发送方和接收方以及发送方账号密码等4、重写SMTPAppender(不重写也能实现邮件发送功能)开启邮箱SMTP服务这里以qq邮......
  • 使用EF框架的优化(六)
    在处理数据库查询时,特别是在涉及到模糊查询和日期字段时,我们常常面临一个挑战:如何在确保查询效率的同时,实现精确和灵活的数据检索?众所周知,直接转换数据库字段类型进行匹配往往会导致查询效率下降,甚至引发全表搜索的问题,这在处理大量数据时尤为明显。因此,找到一种既能保持数据库性......
  • 枚举类的相关使用
    Java枚举类枚举类的含义枚举类型是Java5中新增特性的一部分,它是一种特殊的数据类型,之所以特殊是因为它既是一种类(class)类型却又比类类型多了些特殊的约束,但是这些约束的存在也造就了枚举类型的简洁性、安全性以及便捷性。枚举类的常见使用场景1、定义业务相同的一类属性......
  • 使用 Docker 部署 VS Code in The Browser
    1)介绍GitHub:https://github.com/coder/code-server在日常学习工作中,Vscode已成为我们首选的代码编辑器。然而,其局限性在于当我们从家到公司移动时,难以保持连续的编码体验。针对这一痛点,虽然市面上已有如VisualStudioCodespaces、Cloudstudio和CloudIDE等在线编辑器(Web......
  • 使用Consul服务注册和发现
    2.1服务注册2.1.1引入依赖<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-consul-discovery</artifactId></dependency>2.1.2编写配置文件server:port:80spring:application:......
  • android中Room数据库的基本使用
    简介:还在使用原生的sqllite?有这么清爽且稳如狗的room为啥不用呢?Room是Google官方推荐使用的数据库,相比较某些优秀数据库框架来说,不用过于担心某天库会停止维护,且访问数据库非常流畅,并且提供了与常规的ORM框架一样,通过添加编译期注解来进行表和字段的配置,譬如@Database、@Dao、@E......
  • WebGL:使用着色器进行几何造型
    前言本文将介绍如何使用着色器来进行几何造型,说到几何图形大家一定都不陌生,比如说三角形、圆形,接触过WebGL基础使用的小伙伴一定都知道怎么去在画布上绘制一个三角形,只要传入三个顶点坐标,并选择绘图模式,我们就能在WebGL的画布上画出一个三角形。但是除了这种形式之外,我们还可以......
  • 如何安全的使用密码登录账号(在不知道密码的情况下)
    首先,需要用到的这个工具:度娘网盘提取码:qwu2蓝奏云提取码:2r1z1、打开工具,进入账号密码模块(快捷键:Ctrl+2),如图2、看到鼠标移动到密码那一栏有提示,按住Ctrl或者Alt点击或者双击就能复制内容,这方法虽然快,但还是能看到密码。3、先模拟一个账号,随意填写数据。保存它。之后左侧......