数组转集合问题Arrays.asList()

1. 源码:

Arrays.class
public static <T> List<T> asList(T... a) {//ArrayList为静态内部类return new Arrays.ArrayList(a);
}//内部类
Arrays.ArrayList.class
private static class ArrayList<E> extends AbstractList<E> implements RandomAccess, Serializable {private static final long serialVersionUID = -2764017481108945198L;private final E[] a;//浅拷贝,只是将数据的地址值赋值给ArrayList的属性aArrayList(E[] array) {this.a = (Object[])Objects.requireNonNull(array);}......
}AbstractList.class
public void add(int index, E element) {throw new UnsupportedOperationException();
}public E remove(int index) {throw new UnsupportedOperationException();
}

2. 结论:

  1. Arrays.asList(arr) 转为的实例化对象为Arrays中的静态内部类ArrayList,该类没有重写add() 、remove() 、clear()方法,不能对List增删,只能查改;
  2. Arrays.ArrayList内部类继承了AbstractList抽象类,AbstractList抽象类又实现了List接口,利用多态性,通过List接口接收asList()方法的返回结果,方法调用时,如果Arrays.ArrayList内部类进行了方法重写,则调用该重写方法,否则实际调用的是AbstractList重写List中的方法;
  3. 操作转换后的集合,数组也会变化,Arrays中的内部类ArrayList存放的也是数组,转换时进行的浅拷贝,只是将数组的地址值赋值给ArrayList内部类中的属性a;
  4. 方法参数arr数组如果使用基本数据类型,则会把它看作是一个整体保存在List底层数组中。

3. 验证代码:

@Test
public void test1(){String[] arr = {"小轩","小刘","小王"};List<String> asList = Arrays.asList(arr);//asList.add("aaa"); // 异常:java.lang.UnsupportedOperationException//修改集合,数组也会变化,Arrays中的内部类ArrayList存放的也是数据,而且是浅拷贝,只是将数组的地址值赋值给ArrayList中的属性aString oldValue = asList.set(1, "123");System.out.println("oldvalue:" + oldValue + ",asList:" + asList);System.out.println("改变集合影响对应的数组:" + Arrays.toString(arr));arr[2] = "中国";System.out.println("改变数组影响转换成的集合:" + asList);System.out.println(Arrays.toString(arr));int[] myArray = {1, 2, 3};List myList = Arrays.asList(myArray);System.out.println(myList.size());//1System.out.println(myList.get(0));//System.out.println(myList.get(1));//报错:ArrayIndexOutOfBoundsExceptionint[] array = (int[]) myList.get(0);System.out.println(array[0]);//1//实现转换后能进行增删改查,并且不影响原数组String[] arr1 = {"小轩","小刘","小王"};ArrayList<String> arrayList = new ArrayList<>(arr1.length);Collections.addAll(arrayList, arr1);arrayList.add("小王八");}

基础知识点:一二维数组

public class ArrayTest {@Testpublic void test(){/*** 1.初始化的三种方式* 2.长度在数组初始化之后就确定了,不能再改变* 3.一维数组元素的默认初始化值:* 数组元素是整型:0  浮点型:0.0 char:0或'\u0000',而非'0', '0'对应48 boolean型:false  引用数据类型:null*/int[] arr = new int[]{1,2,4};int[] arr2 = new int[2];//类型推断String[] arr3 = {"小轩","小刘"};//错误 java.lang.ArrayIndexOutOfBoundsException//arr[4] = 5;arr2[0] = 11;arr2[1] = 22;for (int i = 0; i < arr.length; i++) {System.out.println(arr[i]);}/***  1.二维数组初始化的四种方式;*  2.一维数组的元素又是一维数组,才构成二维数组;*  3.内层一维数组的长度不需要一致;*  4.二维数组外层元素为地址值(默认为null),内层默认为初始化值*/int[][] arr4 = new int[3][];arr4[0] = arr;//System.out.println("外层:" + arr4[1] + "、内层: " + arr4[1][1]); //外层为null ,内层报错int[][] arr5 = new int[3][2];System.out.println("外层:" + arr5[1] + "、内层: " + arr5[1][1]); //外层为地址值,内层为默认值String[][] arr6 = new String[][]{{"小轩"},arr3};String[][] arr7 = {{"A","B","C"},arr3};System.out.println(Arrays.toString(arr6));//获取数组长度String[] strs = new String[5];strs[1] = "1";strs[2] = "2";System.out.println(strs.length); // 5}
}

数组转集合问题Arrays.asList()相关推荐

  1. Java数组转集合之Arrays.asList()用法

    Arrays.asList()用法 使用Arrays.asList()的原因无非是想将数组或一些元素转为集合,而你得到的集合并不一定是你想要的那个集合. 而一开始asList的设计时用于打印数组而设计 ...

  2. 【java】数组转list用arrays.aslist报错

    现象: 数组转List用arrays.asList方法,只能用于获取数组长度,不能从转成的List中使用add和remove方法 报错:java.lang.UnsupportedOperationEx ...

  3. java 集合数组初始化_Java用Arrays.asList初始化ArrayList实例方法

    Java用Arrays.asList初始化ArrayList实例方法 发布于 2020-2-29| 复制链接 在本篇文章里小妖给大家分享的是关于Java中使用Arrays.asList初始化Array ...

  4. Java 集合 List Arrays.asList

    2019独角兽企业重金招聘Python工程师标准>>> 参考链接:阿里巴巴Java开发手册终极版v1.3.0 [强制]使用工具类 Arrays.asList()把数组转换成集合时,不 ...

  5. 直接添加集合对象Arrays.asList()

  6. 集合转数组 数组转集合

    数组集合转换 数组变字符串 int[] arr = {4,1,8,5,3,5}; System.out.println(Arrays.toString(arr));//[4,1,8,5,3,5] 1. ...

  7. java的集合和数组_Java集合和数组的区别

    Java集合和数组的区别 集合和容器都是Java中的容器. 区别 数组特点:大小固定,只能存储相同数据类型的数据 集合特点:大小可动态扩展,可以存储各种类型的数据 转换 数组转换为集合: Arrays ...

  8. js 如何将java list集合转换成var类型数组_零基础参加郑州Java培训 一定要注意Arrays.asList的用法...

    作为编程界的老大哥,Java一直是想要加入互联网行业的人的首选.为了能够更快更好地入行,很多零基础学员选择参加郑州Java培训班,跟着老师的脚步由浅入深的学习专业技术.今天千锋郑州小编就给大家分享使用 ...

  9. 将数组转换成集合Arrays.asList,不可进行add和remove操作的原因

    直接上代码: import java.util.Arrays; import java.util.List;public class Test {public static void main(Str ...

最新文章

  1. bufferedreader接收不到数据_FreeRTOS例程3-串口中断接收不定长的数据与二值信号量的使用
  2. 计算机网络(第七版)谢希仁编著 第一章习题详解1-28
  3. php jwt怎么保存再客户端,php – 如何将JWT添加到授权标头?
  4. Linux C enum
  5. 图像匹配之序贯相似性检测法匹配
  6. 人口logistic模型公式_数学建模logistic人口增长模型
  7. 如何寻找p3c的主类,或main方法
  8. 【无标题】drv8825步进电机驱动板子原理图
  9. 上级对下级用通知合适吗_【判断题】通知只能作为下行文使用,下级对上级不能使用通知。 ( )...
  10. ftl有三种映射地址_ftl 入门
  11. 创强教师办公用计算机配备要求,教师办公室电脑使用与管理有哪些规定
  12. 论文写作-如何设置页眉奇偶页显示不同
  13. 修改 QQ 任务栏托盘区小图标和等级图标
  14. 台式计算机风扇为什么光散热,电脑噪音太大了,要如何降噪?其实不光是风扇的事!...
  15. iMAC——U盘全新重装Mac系统
  16. 五个好用的网络协议分析工具(附下载地址)
  17. HTML表单验证pattern
  18. 如何将Word转化为Markdown文本
  19. 有涨有跌!上交/中大/吉大/同济/西交/华南理工纷纷公布计算机考研校线
  20. 漫画《修车危情》漫画修车危情第一话完整版

热门文章

  1. SpringBoot2整合ElasticSearch(包含ElasticSearch入门+spring-boot-starter-data-elasticsearch)
  2. @PostMapping和@GetMapping使用详解
  3. Linux系统安全应用
  4. 登录功能的测试用例设计
  5. ps2键盘测试软件,stm32_ps2键盘显示测试程序
  6. 软件测试工程师应该具备哪些能力?
  7. Java高级面试-面经
  8. 一步拿下抖音+微信生态圈,让内容变现再次加速
  9. Graph Neural Networks with Generated Parameters for Relation Extraction
  10. 双减背景下小学中年级语文单元整体作业设计的实践研究