Java数组转换为List的四种方式
第一种 Arrays.asList
即 Java.util 提供的 Arrays 中的 asList 方法,可以直接将一般的字符串数组以及包装类后的结果做直接转换。
需要注意的是 :通过这种方式得到的List 不能执行增删操作,否则会抛出java.lang.UnsupportedOperationException 异常,即不支持操作的异常,一般的获取get, size等可以照常使用原
因 : Arrays.asList(str)返回值是java.util.Arrays类中一个私有静态内部类 java.utiil.Arrays.Arraylist,不是我们平时用的java.util.ArrayList();
适用于 只转换后作为读取的目标,不能用于增删操作
示例代码如下:
// 引用类型 Integer[] cardNumberArray = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; String[] strings = {"dd", "aa", "545", "ee"}; // 基本类型 int[] cardNumberArrayInt = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; // 元素转换成功 List<Integer> integers = Arrays.asList(cardNumberArray); List<String> list = Arrays.asList(strings); // 出现了基本类型 List<int[]> ints = Arrays.asList(cardNumberArrayInt); // 执行了添加操作 结果出错 integers.add(15);
同时可以看的出 上面如果直接使用了 int[] 这种基本类型, 转换时并不是我们预期的 int 而且把 int[] 认为了是一个泛型中的基本类型,泛型中不支持基本数据类型,所以如果非要使用尽量转为包装类,除非只做基本的运算。
asList 返回的是一个视图,简单来说只能看和读取,不能执行其他操作
总的来说这种方式泛用性不是很强
第二种 ArrayList 构造方法
将第一种 Arrays.asList 的返回值作为 arrayList 够构造方法的入参,即可构造出可以进行增删操的正常 list代码如下:
// 引用类型 Integer[] cardNumberArray = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; String[] strings = {"dd", "aa", "545", "ee"}; List<Integer> arrayList1 = new ArrayList<>(Arrays.asList(cardNumberArray)); List<String> arrayList2 = new ArrayList<>(Arrays.asList(strings));
适用于 数组转为需要执行增删等正常操作的 list,同时数据量不是太大
第三种 Collections.addAll
通过 Collections.addAll(要赋值的list, 原有list);
同样是 JDK 自带的 Collections, 先创建一个对应的 list 并赋予原有数组长度,然后给与赋值Collections.addAll() 会将数组中的元素转为二进制,然后添加到List中。这种方法 效率相对较高
示例代码如下:
// 引用类型 Integer[] cardNumberArray = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; List arrayList = new ArrayList<>(cardNumberArray.length); Collections.addAll(arrayList, cardNumberArray);
第四种 JDK8 特性 Stream
JDK 1.8 支持的 基本类型转换 int[],long[],double[]
不支持的 short[ ],byte[ ],char[]
示例代码如下:
// 基本类型 int[] cardNumberArrayInt = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; List<Integer> collect1 = Arrays.stream(cardNumberArrayInt).boxed().collect(Collectors.toList());
其他支持的 long[] 以及 double[] 与上面类似
同样的引用类型也可以使用这种方式:
Integer[] cardNumberArray = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; List<Integer> collect = Arrays.stream(cardNumberArray).collect(Collectors.toList());
引用类型与基础类型相比 少了 boxed 这一过程,是一个转包装类的过程。对于Stream 不太熟悉的可以参考我的另一篇对 Stream 使用的描述
Java Stream map, Collectors(toMap, toList, toSet, groupingBy, collectingAndThen)等学习和使用理解及案例
到此这篇关于Java开发技巧 数组转List的四种方式总结的文章就介绍到这了,更多相关java数组转list内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Java数据长度获取方式对比之length属性、length()和size()方法详解
在Java编程语言中length、length()和size()是三个常见的用来获取不同数据类型对象长度或大小的方法,但它们各自适用于不同的上下文,这篇文章主要给大家介绍了关于Java数据长度获取方式对比之length属性、length()和size()方法详解2024-07-07使用java8 API遍历过滤文件目录及子目录和隐藏文件示例详解
这篇文章主要介绍了使用java8API遍历过滤文件目录及子目录及隐藏文件示例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-07-07SpringMVC开发restful API之用户查询代码详解
这篇文章主要介绍了SpringMVC开发restful API之用户查询代码详解,小编觉得挺不错的,这里分享给大家,需要的朋友可以参考。下面随小编一起看看吧。2017-11-11
最新评论