231. Java 集合 - 将集合元素转换为数组

231. Java 集合 - 将集合元素转换为数组

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

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


🌟 三种 toArray() 使用方式

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

1. 🛠️ 使用无参 toArray()

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

java 复制代码
Collection<String> strings = List.of("one", "two", "three");

Object[] array = strings.toArray();

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

🖨️ 输出结果

java 复制代码
[one, two, three]

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


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

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

java 复制代码
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));

🖨️ 输出结果

java 复制代码
[one, two]
[one, two, null, null, null]

✨ 背后细节解释

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

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

java 复制代码
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));

🖨️ 输出结果

java 复制代码
Before: [old1, old2, old3, old4]
After : [one, two, null, old4]
Same array? true

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


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

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

java 复制代码
Collection<String> strings = List.of("one", "two", "three");

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

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

🖨️ 输出结果

java 复制代码
[one, two, three]

🎯 小结

方法 优点 缺点
toArray() 简单直接 只返回 Object[],需要小心类型
toArray(T[] array) 返回指定类型,兼容老版本Java 代码稍长,需要处理数组长度
toArray(IntFunction<T[]> generator) 代码最简洁,推荐(Java 11+) 需要理解构造器引用语法
相关推荐
光影少年8 分钟前
RN 网络请求:Fetch / Axios 封装、超时、拦截器
前端·react native·react.js
大黄评测9 分钟前
jQuery 遍历方法 each 实战:循环处理列表数据
后端
大勇前进17 分钟前
jQuery 事件委托原理:彻底解决动态生成元素绑定失效问题
后端
学习星球21 分钟前
Vue 3 实战:拆解 RealWorld 项目
前端·vue.js
苍何27 分钟前
做了个微信聊天爆款视频 Skill, Codex / WorkBuddy一键复刻使用
后端·aigc
卷无止境33 分钟前
用 FastAPI 撑起大文件的上传下载:从流式处理到断点续传的完整实践
后端·python·fastapi
铁皮饭盒34 分钟前
网页端, 6.5MB人脸识别模型, 谷歌框架, 又快又准
前端·javascript·后端
xiaohaiAIgeo37 分钟前
【2026年】ASHRAE 110与EN 14175通风柜测试标准对比:进口与国产品牌性能差距
java·前端·数据库·科普知识
长大198839 分钟前
jQuery AJAX 完整封装教程:告别重复写请求代码
后端
用户2930750976691 小时前
TypeScript 必考题:Type 与 Interface 全面对比
前端