Arrays.asList()避坑指南
1. Arrays.asList()
该方法是将数组转化成List集合的方法。
List<String> list = Arrays.asList("a","b","c");
注意:
- (1)该方法适用于对象型数据的数组(String、Integer…)
- (2)该方法不建议使用于基本数据类型的数组(byte,short,int,long,float,double,boolean)
- (3)该方法将数组与List列表链接起来:当更新其一个时,另一个自动更新
- (4)不支持add()、remove()、clear()等方法
2. 避坑
用此方法得到的List的长度是不可改变的,
当你向这个List添加或删除一个元素时(例如 list.add(“d”);)程序就会抛出异常(java.lang.UnsupportedOperationException)。 怎么会这样?只需要看看asList()方法是怎么实现的就行了:
public static List asList(T… a) {return new ArrayList<>(a);}
当你看到这段代码时可能觉得没啥问题啊,不就是返回了一个ArrayList对象吗?问题就出在这里。
这个ArrayList不是java.util包下的,而是java.util.Arrays.ArrayList
它是Arrays类自己定义的一个静态内部类,这个内部类没有实现add()、remove()方法,而是直接使用它的父类AbstractList的相应方法。
而AbstractList中的add()和remove()是直接抛出java.lang.UnsupportedOperationException异常的!
public void add(int index, E element) { throw new UnsupportedOperationException();}
public E remove(int index) {throw new UnsupportedOperationException();}
总结:
- 如果你的List只是用来遍历,就用Arrays.asList()。
- 如果你的List还要添加或删除元素,还是乖乖地new一个java.util.ArrayList,然后一个一个的添加元素。
import java.util.Arrays;
import java.util.List;public class Test {public static void main(String[] args){//1、对象类型(String型)的数组数组使用asList(),正常String[] strings = {"aa", "bb", "cc"};List<String> stringList = Arrays.asList(strings);System.out.print("1、String类型数组使用asList(),正常: ");for(String str : stringList){System.out.print(str + " ");}System.out.println();//2、对象类型(Integer)的数组使用asList(),正常Integer[] integers = new Integer[] {1, 2, 3};List<Integer> integerList = Arrays.asList(integers);System.out.print("2、对象类型的数组使用asList(),正常: ");for(int i : integerList){System.out.print(i + " ");}
// for(Object o : integerList){// System.out.print(o + " ");
// }System.out.println();//3、基本数据类型的数组使用asList(),出错int[] ints = new int[]{1, 2, 3};List intList = Arrays.asList(ints);System.out.print("3、基本数据类型的数组使用asList(),出错(输出的是一个引用,把ints当成一个元素了):");for(Object o : intList){System.out.print(o.toString());}System.out.println();System.out.print(" " + "这样遍历才能正确输出:");int[] ints1 = (int[]) intList.get(0);for(int i : ints1){System.out.print(i + " ");}System.out.println();//4、当更新数组或者List,另一个将自动获得更新System.out.print("4、当更新数组或者List,另一个将自动获得更新: ");integerList.set(0, 5);for(Object o : integerList){System.out.print(o + " ");}for(Object o : integers){System.out.print (o + " ");}System.out.println();//5、add() remove() 报错System.out.print("5、add() remove() 报错: ");
// integerList.remove(0);
// integerList.add(3, 4);
// integerList.clear(); }}
Arrays.asList()避坑指南相关推荐
- Arrays.asList()的使用指南
Arrays.asList()的使用指南 最近在使用Arrays.asList()遇到的一些问题和坑,https://javadevnotes.com/java-array-to-list-examp ...
- 17条避坑指南:一份来自谷歌的数据库经验贴
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | https://medium.com/@rak ...
- 怎么把原来的墙拆掉_电视墙避坑指南要收好!拆掉重装太心累...
电视墙是家里装修最为重要的一个地方. 相信很多人都想要把电视墙装修得简单又大气,而且还是容易搞卫生的整洁类型~但是,电视墙贴砖过程中,有很多坑需要注意,一不小心就要像下面的业主一样,拆掉重装. 业主反 ...
- VMProtect SDK完全避坑指南
文章目录 前言 编译VMProtect Demo 生成机器码 替换密钥对 生成序列号 总结 前言 在编写软件的时候,通常会有这样一个需求,需要对自己写的软件实现一机一码加密保护,并且最好能够限制使用时 ...
- Serverless 时代前端避坑指南
作者 | 张挺 每个时代,从来不缺机会. 云原生的浪潮席卷而来,从 14 年到现在,上云的声音就没有停歇过,而如今到了 2020,云厂商都已经准备好了,而前端,是否也准备好踏入这纷争的领域,去拥抱时代 ...
- 工业级光纤收发器使用“避坑”指南
工业级光纤收发器在使用中有很多的注意事项,往往这些注意事项经常被忽略.下面飞畅科技就整理了一些工业级光纤收发器使用"避坑"指南,大家可以仔细看看,引起重视. 使用工业级光纤收发器连 ...
- 项目从0到1避坑指南
背景: 物流行业,老板信息化意识弱,不是现有的TMS而是一个新的方向,目前市场上竞品较少 前言: 一个项目从0到1,有相关的固定的考虑事项.然而,由于公司环境.项目涉及的行业等一些实际条件的约束,会在 ...
- python避坑指南_Linux下Python3.6的安装及避坑指南
Python3的安装 1.安装依赖环境 Python3在安装的过程中可能会用到各种依赖库,所以在正式安装 Python 3之前,需要将这些依赖库先行安装好. yum -y install zlib-d ...
- HarmonyOS 开发避坑指南
Harmony OS 开发避坑指南--源码下载和编译 本文介绍了如何下载鸿蒙系统源码,如何一次性配置可以编译三个目标平台(Hi3516,Hi3518和Hi3861)的编译环境,以及如何将源码编译为三个 ...
最新文章
- 正则表达式调用“或”变量
- Flomaster 2020中文版
- 14行代码AC——1017 A除以B (20分)(大数运算+讲解)
- Spring学习笔记—最小化Spring XML配置
- 机器学习,深度学习相关介绍
- css3中3d旋转中rotatex,rotatey,rotatez的旋转正方向
- esp8266应用教程——TFT LCD显示
- Web渗透测试学习路线图
- 深度思考:到底什么是面向接口编程?
- et200s模块接线图讲解_西门子S7-1500使用ET200S 1SI模块实现自由口通信
- 微信小程序:自适应来电模拟器
- Oracle使用函数达到drop table if exists
- 抽象工厂模式之手机主题
- matlab中的颜色设置颜色,matlabpcolor设置颜色
- NRF52832-QFAA、NRF52840-QIAA性能区别-蓝牙智能手环穿戴
- 2022高频面试题之css篇
- MFC几种给对话框添加背景图的方法
- 软件测评师教程之软件测试基础
- Dev C++下载及使用
- 文件恢复软件哪个最好用?5 款最佳照片文件恢复软件
热门文章
- 推荐计算机领域的几本入门书籍
- 两台电脑通过一根网线进行传输文件 可达百兆速度
- android scaleanimation动画,Android 动画之ScaleAnimation应用详解
- Android ScaleAnimation代码调用示例
- Dark Wonder(暗黑奇侠)学习笔记
- 输入码、区位码、内码、国标码的出现原因
- linux虚拟机中dns安装,linux虚拟机dns服务器配置步骤(linux服务器配置dns步骤)
- 电信物联网卡有哪些类型的套餐
- 解决QQ群、讨论组上传文件,由于网络原因上传失败?
- iOS之字符串处理:截取字符串、匹配字符串、分隔字符串