Arrays.asList三坑,数组/集合转换,remove/add异常,修改影响原数组

举报
object 发表于 2024/02/19 20:15:09 2024/02/19
【摘要】 一、Arrays.asList说明Arrays作为java.util下的工具类,提供了很多好用的方法,主要是针对数据和集合进行处理。今天主要针对Arrays.asList函数进行分析说明。Arrays.asList见名知意来说,就是把各项数据转换成集合,入参是不定长参数,返回值是对应的List的泛型,这里的List需要额外注意。二、Arrays.asList不能直接转化基本数据数组/集合为对...

一、Arrays.asList说明

Arrays作为java.util下的工具类,提供了很多好用的方法,主要是针对数据和集合进行处理。今天主要针对Arrays.asList函数进行分析说明。Arrays.asList见名知意来说,就是把各项数据转换成集合,入参是不定长参数,返回值是对应的List的泛型,这里的List需要额外注意。

二、Arrays.asList不能直接转化基本数据数组/集合为对应大小的集合

直接使用基础数据数组的时候,会直接将该数组作为一个集合元素,且size为1

Arrays.asList(new int[]{1, 2, 3});

输出size为1

不过这个问题不大,一般我们会生成变量名,如果直接使用IDEA提供的快捷变量名生成,也可以看到泛型为List<int[]>。 快捷键:Alt+Enter(部分情况可能会提示Collections.singletonList),而不是生成变量名。而且也不仅针对基本数据类型,包含基础数据集合,String集合等是相同的结果,都会直接作为一个元素。不过包装类集合不在此列,可以使用IDEA帮助查看。

三、使用Arrays.asList生成的对象不能进行add和remove操作

这个原因也很简单,返回list并未提供add和remove操作。源码中可以看到返回的ArrayList,需要注意这里的ArrayList是Arrays类的静态类,不是我们常使用的那个。而这个类是直接继承AbstractList,而这个类的实现就是直接抛出异常

四、使用Arrays.asList生成的集合,当修改数据时,会影响原数组或集合

这个不注意可能会导致异常的bug,建议使用ArrayList进行包装转换

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。