Java数组转换为List的四种方式

 更新时间:2023年09月13日 11:18:36   作者:极光雨雨  
这篇文章主要介绍了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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot使用Redis存储Session实践

    SpringBoot使用Redis存储Session实践

    本文介绍了Session的基本概念、工作流程和常见应用场景,并详细解释了如何在JavaServlet中使用Session,接着,文章讨论了Redis存储Session的优势和配置方法,并提供了一个示例代码,最后,总结了如何使用Redis存储Session以及注意事项
    2026-02-02
  • SpringBoot启动失败的解决方法:A component required a bean of type ‘xxxxxxx‘ that could not be found.

    SpringBoot启动失败的解决方法:A component required a&nb

    这篇文章主要介绍了解决SpringBoot启动失败:A component required a bean of type ‘xxxxxxx‘ that could not be found.,目前解决方法有两种,一种是不注入bean的方式,另一种是使用@Component的方式,本文给大家详细讲解,需要的朋友可以参考下
    2023-02-02
  • Java面试题目集锦

    Java面试题目集锦

    本文是小编日常收集整理的java面试题目,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-09-09
  • Spring-基于Spring使用自定义注解及Aspect实现数据库切换操作

    Spring-基于Spring使用自定义注解及Aspect实现数据库切换操作

    这篇文章主要介绍了Spring-基于Spring使用自定义注解及Aspect实现数据库切换操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • 简单谈谈Java 中的线程的几种状态

    简单谈谈Java 中的线程的几种状态

    这篇文章主要介绍了简单谈谈Java 中的线程的几种状态的相关资料,需要的朋友可以参考下
    2020-02-02
  • Java虚拟机类加载器之双亲委派机制模型案例

    Java虚拟机类加载器之双亲委派机制模型案例

    这篇文章主要介绍了Java虚拟机类加载器之双亲委派机制模型案例,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • 深入解析Spring Boot 的SPI机制详情

    深入解析Spring Boot 的SPI机制详情

    这篇文章主要介绍了深入解析Spring Boot的SPI机制详情,SPI是JDK内置的一种服务提供发现机制,可以用来启用框架扩展和替换组件,主要用于框架中开发,更多相关介绍,感兴趣的小伙伴可以参考一下下面文章内容
    2022-08-08
  • Spring boot集中异常处理方法实例

    Spring boot集中异常处理方法实例

    这篇文章主要介绍了Spring boot集中异常处理方法实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • Java BigDecimal与RoundingMode最常用的用法总结

    Java BigDecimal与RoundingMode最常用的用法总结

    RoundingMode是Java中定义舍入行为的枚举类,包括UP、DOWN、CEILING等8种模式,适用于精确数字运算,这篇文章主要介绍了Java BigDecimal与RoundingMode最常用用法总结的相关资料,需要的朋友可以参考下
    2025-12-12
  • 线程池之newCachedThreadPool可缓存线程池的实例

    线程池之newCachedThreadPool可缓存线程池的实例

    这篇文章主要介绍了线程池之newCachedThreadPool可缓存线程池的实例,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06

最新评论