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

总结:

  1. 如果你的List只是用来遍历,就用Arrays.asList()。
  2. 如果你的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()避坑指南相关推荐

  1. Arrays.asList()的使用指南

    Arrays.asList()的使用指南 最近在使用Arrays.asList()遇到的一些问题和坑,https://javadevnotes.com/java-array-to-list-examp ...

  2. 17条避坑指南:一份来自谷歌的数据库经验贴

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | https://medium.com/@rak ...

  3. 怎么把原来的墙拆掉_电视墙避坑指南要收好!拆掉重装太心累...

    电视墙是家里装修最为重要的一个地方. 相信很多人都想要把电视墙装修得简单又大气,而且还是容易搞卫生的整洁类型~但是,电视墙贴砖过程中,有很多坑需要注意,一不小心就要像下面的业主一样,拆掉重装. 业主反 ...

  4. VMProtect SDK完全避坑指南

    文章目录 前言 编译VMProtect Demo 生成机器码 替换密钥对 生成序列号 总结 前言 在编写软件的时候,通常会有这样一个需求,需要对自己写的软件实现一机一码加密保护,并且最好能够限制使用时 ...

  5. Serverless 时代前端避坑指南

    作者 | 张挺 每个时代,从来不缺机会. 云原生的浪潮席卷而来,从 14 年到现在,上云的声音就没有停歇过,而如今到了 2020,云厂商都已经准备好了,而前端,是否也准备好踏入这纷争的领域,去拥抱时代 ...

  6. 工业级光纤收发器使用“避坑”指南

    工业级光纤收发器在使用中有很多的注意事项,往往这些注意事项经常被忽略.下面飞畅科技就整理了一些工业级光纤收发器使用"避坑"指南,大家可以仔细看看,引起重视. 使用工业级光纤收发器连 ...

  7. 项目从0到1避坑指南

    背景: 物流行业,老板信息化意识弱,不是现有的TMS而是一个新的方向,目前市场上竞品较少 前言: 一个项目从0到1,有相关的固定的考虑事项.然而,由于公司环境.项目涉及的行业等一些实际条件的约束,会在 ...

  8. python避坑指南_Linux下Python3.6的安装及避坑指南

    Python3的安装 1.安装依赖环境 Python3在安装的过程中可能会用到各种依赖库,所以在正式安装 Python 3之前,需要将这些依赖库先行安装好. yum -y install zlib-d ...

  9. HarmonyOS 开发避坑指南

    Harmony OS 开发避坑指南--源码下载和编译 本文介绍了如何下载鸿蒙系统源码,如何一次性配置可以编译三个目标平台(Hi3516,Hi3518和Hi3861)的编译环境,以及如何将源码编译为三个 ...

最新文章

  1. 正则表达式调用“或”变量
  2. Flomaster 2020中文版
  3. 14行代码AC——1017 A除以B (20分)(大数运算+讲解)
  4. Spring学习笔记—最小化Spring XML配置
  5. 机器学习,深度学习相关介绍
  6. css3中3d旋转中rotatex,rotatey,rotatez的旋转正方向
  7. esp8266应用教程——TFT LCD显示
  8. Web渗透测试学习路线图
  9. 深度思考:到底什么是面向接口编程?
  10. et200s模块接线图讲解_西门子S7-1500使用ET200S 1SI模块实现自由口通信
  11. 微信小程序:自适应来电模拟器
  12. Oracle使用函数达到drop table if exists
  13. 抽象工厂模式之手机主题
  14. matlab中的颜色设置颜色,matlabpcolor设置颜色
  15. NRF52832-QFAA、NRF52840-QIAA性能区别-蓝牙智能手环穿戴
  16. 2022高频面试题之css篇
  17. MFC几种给对话框添加背景图的方法
  18. 软件测评师教程之软件测试基础
  19. Dev C++下载及使用
  20. 文件恢复软件哪个最好用?5 款最佳照片文件恢复软件

热门文章

  1. 推荐计算机领域的几本入门书籍
  2. 两台电脑通过一根网线进行传输文件 可达百兆速度
  3. android scaleanimation动画,Android 动画之ScaleAnimation应用详解
  4. Android ScaleAnimation代码调用示例
  5. Dark Wonder(暗黑奇侠)学习笔记
  6. 输入码、区位码、内码、国标码的出现原因
  7. linux虚拟机中dns安装,linux虚拟机dns服务器配置步骤(linux服务器配置dns步骤)
  8. 电信物联网卡有哪些类型的套餐
  9. 解决QQ群、讨论组上传文件,由于网络原因上传失败?
  10. iOS之字符串处理:截取字符串、匹配字符串、分隔字符串