数组转集合问题Arrays.asList()
数组转集合问题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. 结论:
- Arrays.asList(arr) 转为的实例化对象为Arrays中的静态内部类ArrayList,该类没有重写add() 、remove() 、clear()方法,不能对List增删,只能查改;
- Arrays.ArrayList内部类继承了AbstractList抽象类,AbstractList抽象类又实现了List接口,利用多态性,通过List接口接收asList()方法的返回结果,方法调用时,如果Arrays.ArrayList内部类进行了方法重写,则调用该重写方法,否则实际调用的是AbstractList重写List中的方法;
- 操作转换后的集合,数组也会变化,Arrays中的内部类ArrayList存放的也是数组,转换时进行的浅拷贝,只是将数组的地址值赋值给ArrayList内部类中的属性a;
- 方法参数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()相关推荐
- Java数组转集合之Arrays.asList()用法
Arrays.asList()用法 使用Arrays.asList()的原因无非是想将数组或一些元素转为集合,而你得到的集合并不一定是你想要的那个集合. 而一开始asList的设计时用于打印数组而设计 ...
- 【java】数组转list用arrays.aslist报错
现象: 数组转List用arrays.asList方法,只能用于获取数组长度,不能从转成的List中使用add和remove方法 报错:java.lang.UnsupportedOperationEx ...
- java 集合数组初始化_Java用Arrays.asList初始化ArrayList实例方法
Java用Arrays.asList初始化ArrayList实例方法 发布于 2020-2-29| 复制链接 在本篇文章里小妖给大家分享的是关于Java中使用Arrays.asList初始化Array ...
- Java 集合 List Arrays.asList
2019独角兽企业重金招聘Python工程师标准>>> 参考链接:阿里巴巴Java开发手册终极版v1.3.0 [强制]使用工具类 Arrays.asList()把数组转换成集合时,不 ...
- 直接添加集合对象Arrays.asList()
- 集合转数组 数组转集合
数组集合转换 数组变字符串 int[] arr = {4,1,8,5,3,5}; System.out.println(Arrays.toString(arr));//[4,1,8,5,3,5] 1. ...
- java的集合和数组_Java集合和数组的区别
Java集合和数组的区别 集合和容器都是Java中的容器. 区别 数组特点:大小固定,只能存储相同数据类型的数据 集合特点:大小可动态扩展,可以存储各种类型的数据 转换 数组转换为集合: Arrays ...
- js 如何将java list集合转换成var类型数组_零基础参加郑州Java培训 一定要注意Arrays.asList的用法...
作为编程界的老大哥,Java一直是想要加入互联网行业的人的首选.为了能够更快更好地入行,很多零基础学员选择参加郑州Java培训班,跟着老师的脚步由浅入深的学习专业技术.今天千锋郑州小编就给大家分享使用 ...
- 将数组转换成集合Arrays.asList,不可进行add和remove操作的原因
直接上代码: import java.util.Arrays; import java.util.List;public class Test {public static void main(Str ...
最新文章
- bufferedreader接收不到数据_FreeRTOS例程3-串口中断接收不定长的数据与二值信号量的使用
- 计算机网络(第七版)谢希仁编著 第一章习题详解1-28
- php jwt怎么保存再客户端,php – 如何将JWT添加到授权标头?
- Linux C enum
- 图像匹配之序贯相似性检测法匹配
- 人口logistic模型公式_数学建模logistic人口增长模型
- 如何寻找p3c的主类,或main方法
- 【无标题】drv8825步进电机驱动板子原理图
- 上级对下级用通知合适吗_【判断题】通知只能作为下行文使用,下级对上级不能使用通知。 ( )...
- ftl有三种映射地址_ftl 入门
- 创强教师办公用计算机配备要求,教师办公室电脑使用与管理有哪些规定
- 论文写作-如何设置页眉奇偶页显示不同
- 修改 QQ 任务栏托盘区小图标和等级图标
- 台式计算机风扇为什么光散热,电脑噪音太大了,要如何降噪?其实不光是风扇的事!...
- iMAC——U盘全新重装Mac系统
- 五个好用的网络协议分析工具(附下载地址)
- HTML表单验证pattern
- 如何将Word转化为Markdown文本
- 有涨有跌!上交/中大/吉大/同济/西交/华南理工纷纷公布计算机考研校线
- 漫画《修车危情》漫画修车危情第一话完整版
热门文章
- SpringBoot2整合ElasticSearch(包含ElasticSearch入门+spring-boot-starter-data-elasticsearch)
- @PostMapping和@GetMapping使用详解
- Linux系统安全应用
- 登录功能的测试用例设计
- ps2键盘测试软件,stm32_ps2键盘显示测试程序
- 软件测试工程师应该具备哪些能力?
- Java高级面试-面经
- 一步拿下抖音+微信生态圈,让内容变现再次加速
- Graph Neural Networks with Generated Parameters for Relation Extraction
- 双减背景下小学中年级语文单元整体作业设计的实践研究