简单介绍List和数组转List集合

您所在的位置:网站首页 数组转list对象集合 简单介绍List和数组转List集合

简单介绍List和数组转List集合

2024-04-18 15:32| 来源: 网络整理| 查看: 265

目录综述如何创建List六种数组转List的方法for循环遍历Arrays.asList()new ArrayList(Arrays.asList(array))Collections.addAll()stream流collect方法Stream.of结束语

摘要:介绍List接口和创建List对象的三个常用方法,介绍数组转换List的几种方法。

综述

  线性列表List是一个接口,继承自接口Collection,习惯性地会将实现了List接口的对象称为List集合。List有两个常用的实现类ArrayList和LinkedList,在开发中使用率最多的是可以动态扩容的ArrayList。ArrayList 底层是数组结构,查询快,增删慢;LinkedList 底层结构是链表,查询慢,增删快。从功能特性上来看,List是有序、可重复的单列集合,集合中的每个元素都有对应的顺序索引,可以通过该索引来精确地控制指定位置上的元素。默认情况下,List会按元素的添加顺序给元素设置索引,第一个添加到List集合中的元素索引为0,第二个为1,以此类推可以得到后面元素的索引。所以List和数组的行为几乎相同,都是有序的存储结构。

如何创建List

  下面是创建List的三种常见方法:

通过多态方式:new + List的某个子类,譬如 new ArrayList() 等; List.of():of()方法可以根据给定的元素快速创建一个只读的List对象,但该方法不接受null元素,如果传入null会抛出NullPointerException异常。 Guava Lists工具类:使用方法为List list = Lists.newArrayList(32, 0, 77, 90, 700, 132, 5, 36);,需要引入的guava包如下: com.google.guava guava-parent 32.0.0-jre 六种数组转List的方法

  在工作中,经常遇到需要对List与数组互相转换的场景,因而本文介绍几种数组转换为List的方法。下文使用的测试用例若无特殊说明,都基于如下数组:

Integer[] arr = {32, 0, 77, 90, 700, 132, 5, 36}; for循环遍历

  通过for循环遍历把元素添加到list集合是最基础的一种操作:

List list = new ArrayList(); for (int one : arr) { list.add(one); } Arrays.asList()

  数组泛型如果是基础数据类型,需要转为引用数据类型,如int 转为Integer。如果直接使用基础数据类型,那么输出的是地址,因为list集合存放的是数组。下面的示例是可以顺利转换的:

//集合封装的是ints List ints = Arrays.asList(arr); Arrays.asList(arr).forEach(System.out::println);

  函数Arrays.asList(array) 返回的、只读的List对象是由原始数组构成的、固定大小的列表,实现类是 java.util.Arrays 类中一个私有静态内部类 java.util.Arrays.ArrayList。java.util.Arrays.ArrayList 类封装了 set()、get()和contains() 等方法,但是没有 add()和remove() 方法,所以调用add() 或remove() 方法会抛出异常UnsupportedOperationException。

new ArrayList(Arrays.asList(array))

  这样定义的List可以进行增删操作,推荐这么转换。

List list = new ArrayList(Arrays.asList(arr)); list.forEach(System.out::println);

  此转换方法创建了一个新的List集合,对集合的修改不会改变数组里的值。

Collections.addAll()

  通过集合工具类Collections.addAll()方法转换:

List list = new ArrayList(arr.length); Collections.addAll(list, arr); list.add(897); list.forEach(System.out::println);

  根据数组长度创建一个相同长度的list,然后通过Collections.addAll()函数把数组里的元素添加到list里(最高效)。这样得到的对象可以直接添加或者删除元素。

stream流collect方法

  可以使用流stream将下列三种数组转换为List——Integer[]、Long[]、Double[]。

List list = Arrays.stream(arr).collect(Collectors.toList()); list.add(897); list.forEach(System.out::println);

  在Java 8中,可以使用如下装箱方法把基础数据类型数组int[]、long[]、double[]转换成List集合,但是其它数据类型比如short[]、byte[]、char[],暂不支持。

List list = Arrays.stream(new int[] {1, 2, 3}).boxed().collect(Collectors.toList()); list.add(777); list.forEach(System.out::println);

  备注:为什么int[]不能直接转为List,而Integer[]可以转为List?因为List的泛型必须是引用类型。

Stream.of

  通过Stream.of方法转换为List:

List list = Stream.of(arr).collect(Collectors.toList()); list.add(7779); list.forEach(System.out::println); 结束语

  如果大家对上述文章有好的建议,欢迎在评论区留言,楼兰胡杨会虚心接受、认真聆听、积极反馈。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3