Java将集合元素转换为数组的三种方式

 更新时间:2025年11月06日 11:14:33   作者:Cache技术分享  
在实际开发中,虽然用集合来存储元素通常更灵活,但有些场景下,我们仍然需要将集合转换成数组,下面就来介绍一下Java将集合元素转换为数组的三种方式,感兴趣的可以了解一下

在实际开发中,虽然用集合(Collection)来存储元素通常更灵活,但有些场景下,我们仍然需要将集合转换成数组(比如与老旧 API 交互、需要固定大小存储等)。

Java 的 Collection 接口提供了 三种方式 来实现这一点,都是通过 toArray() 方法的不同重载实现的。

🌟 三种toArray()使用方式

方法返回特点
toArray()Object[]返回一个对象数组,不带类型信息
toArray(T[] array)T[]返回一个指定类型的数组,需要传入一个数组
toArray(IntFunction<T[]> generator)T[]使用构造器引用创建数组,代码更简洁(JDK 8+)

1. 🛠️ 使用无参toArray()

这种方式最简单:直接调用 toArray(),返回的是一个 Object[] 类型的数组。

Collection<String> strings = List.of("one", "two", "three");

Object[] array = strings.toArray();

System.out.println(Arrays.toString(array));

🖨️ 输出结果

[one, two, three]

⚠️ 注意: 这种方式得到的是 Object[],如果你强制转换成 String[]可能会在运行时抛出异常ClassCastException)。 因此,一般不推荐在需要明确类型时使用这种方式。

2. 🛠️ 使用带数组参数的toArray(T[] array)

这种方式可以直接得到正确类型的数组,比如 String[],而且避免类型转换出错

Collection<String> strings = List.of("one", "two");

// 方式1:传入一个长度为0的数组
String[] result1 = strings.toArray(new String[0]);
System.out.println(Arrays.toString(result1));

// 方式2:传入一个足够大的数组
String[] largerArray = new String[5];
String[] result2 = strings.toArray(largerArray);
System.out.println(Arrays.toString(result2));

🖨️ 输出结果

[one, two]
[one, two, null, null, null]

✨ 背后细节解释

  • 如果传入的数组长度大于等于集合的大小,元素将被直接拷贝到这个数组中;
  • 如果传入的数组长度小于集合的大小,Java会创建一个新数组,大小正好适配集合元素;
  • 如果数组比集合大,拷贝完元素后,第一个空余位置会设为 null剩下的位置保持原值

🔥 示例:传入比集合大的数组

Collection<String> strings = List.of("one", "two");

String[] largerTab = {"old1", "old2", "old3", "old4"};
System.out.println("Before: " + Arrays.toString(largerTab));

String[] result = strings.toArray(largerTab);

System.out.println("After : " + Arrays.toString(result));
System.out.println("Same array? " + (result == largerTab));

🖨️ 输出结果

Before: [old1, old2, old3, old4]
After : [one, two, null, old4]
Same array? true

注意:返回的是传入的原数组,而不是新建的数组!

3. 🛠️ 使用toArray(IntFunction<T[]> generator)(推荐)

Java 11 开始,你可以使用构造器引用(例如 String[]::new)来创建数组,更加优雅、简洁!

Collection<String> strings = List.of("one", "two", "three");

String[] array = strings.toArray(String[]::new);

System.out.println(Arrays.toString(array));

🖨️ 输出结果

[one, two, three]

🎯 小结

方法优点缺点
toArray()简单直接只返回 Object[],需要小心类型
toArray(T[] array)返回指定类型,兼容老版本Java代码稍长,需要处理数组长度
toArray(IntFunction<T[]> generator)代码最简洁,推荐(Java 11+)需要理解构造器引用语法

到此这篇关于Java将集合元素转换为数组的三种方式的文章就介绍到这了,更多相关Java 集合元素转换为数组内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MyBatis之自动映射与缓存问题及解析

    MyBatis之自动映射与缓存问题及解析

    文章主要介绍了MyBatis的配置与操作,包括自动映射(autoMappingBehavior)的设置(NONE、PARTIAL、FULL)、手动映射的步骤(使用<resultMap>标签)、SQL注入攻击的原理、缓存机制及其影响(一级缓存和二级缓存的作用、缓存失效的情况)
    2025-09-09
  • 详解Android中的Toast源码

    详解Android中的Toast源码

    这篇文章主要介绍了详解Android中的Toast源码,Toast使用Java语言实现,需要的朋友可以参考下
    2015-07-07
  • Java多线程程序中synchronized修饰方法的使用实例

    Java多线程程序中synchronized修饰方法的使用实例

    synchronized关键字主要北用来进行线程同步,这里我们主要来演示Java多线程程序中synchronized修饰方法的使用实例,需要的朋友可以参考下:
    2016-06-06
  • 浅谈springboot之JoinPoint的getSignature方法

    浅谈springboot之JoinPoint的getSignature方法

    这篇文章主要介绍了springboot之JoinPoint的getSignature方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • 详解SpringBoot如何优雅的处理免登录接口

    详解SpringBoot如何优雅的处理免登录接口

    在项目开发过程中,会有很多API接口不需要登录就能直接访问,比如公开数据查询之类的,常规处理方法基本是 使用拦截器或过滤器,拦截需要认证的请求路径,本文介绍一个更优雅的方法自定义注解的方式,文中通过代码示例介绍的非常详细,需要的朋友可以参考下
    2024-01-01
  • springboot发布dubbo服务注册到nacos实现方式

    springboot发布dubbo服务注册到nacos实现方式

    这篇文章主要介绍了springboot发布dubbo服务注册到nacos实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • java根据图片中绿色像素点的多少进行排序

    java根据图片中绿色像素点的多少进行排序

    这篇文章主要介绍了java根据图片中绿色像素点的多少进行排序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Java方法递归调用实例解析

    Java方法递归调用实例解析

    这篇文章主要介绍了Java方法递归调用实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • Java 关键字static详解及实例代码

    Java 关键字static详解及实例代码

    这篇文章主要介绍了Java 关键字static详解及实例代码的相关资料,需要的朋友可以参考下
    2017-04-04
  • Java中的线程生命周期核心概念

    Java中的线程生命周期核心概念

    这篇文章主要介绍了Java中的线程生命周期核心概念,通过使用一个快速的图解展开文章内容,需要的小伙伴可以参考一下
    2022-06-06

最新评论