当前位置: 代码网 > it编程>编程语言>Java > Java toArray() 方法 的使用

Java toArray() 方法 的使用

2025年12月04日 Java 我要评论
一、toarray()方法简介toarray() 是 java 集合框架中定义在 java.util.collection 接口里的一个方法,用于将集合转换为数组。方法签名:// 无参版本object

一、toarray()方法简介

toarray() 是 java 集合框架中定义在 java.util.collection 接口里的一个方法,用于将集合转换为数组

方法签名:

// 无参版本
object[] toarray();

// 泛型版本(推荐使用)
<t> t[] toarray(t[] a);

二、两种toarray()的区别

1. 无参toarray()

  • 返回一个 object 类型数组
  • 需要强制类型转换才能使用具体类型
list<string> list = list.of("java", "python", "c++");
object[] arr = list.toarray();

system.out.println(arrays.tostring(arr));
// 输出: [java, python, c++]

⚠️ 但是如果你想用 string[] 接收,手动转换:

string[] strarr = (string[]) list.toarray(); // 会报错 ❌

会抛出:

class [ljava.lang.object; cannot be cast to class [ljava.lang.string; ([ljava.lang.object; and [ljava.lang.string; are in module java.base of loader 'bootstrap')

原因:toarray() 返回的是 object[],而不是 string[]。因为数组在运行时知道自己的具体类型,反过来不能转换

2. 带参数的toarray(t[] a)(推荐使用)

这个方法允许我们指定返回数组的类型,是更安全、类型友好的方式。

list<string> list = list.of("java", "python", "c++");
string[] arr = list.toarray(new string[0]);

system.out.println(arrays.tostring(arr));
// 输出: [java, python, c++]

推荐写法:

t[] array = list.toarray(new t[0]);

jdk 11 以后甚至可以这样写:

string[] arr = list.toarray(string[]::new);

这种方式使用了 方法引用(method reference),更加简洁高效。

三、toarray(t[] a)方法的内部机制

jdk 源码(简化版):

public <t> t[] toarray(t[] a) {
    if (a.length < size)
        // 如果传入数组太小,则创建一个新的同类型数组
        return (t[]) arrays.copyof(elementdata, size, a.getclass());
    system.arraycopy(elementdata, 0, a, 0, size);
    if (a.length > size)
        a[size] = null;
    return a;
}

👉 可以看出:

  • 若传入数组大小不够,会创建一个新的;
  • 若传入数组更大,则多余部分置为 null
  • 返回的数组类型与传入数组的类型一致。

四、相关案例

示例 1:list 转数组

list<integer> numbers = arrays.aslist(1, 2, 3, 4, 5);

// 推荐写法
integer[] numarray = numbers.toarray(new integer[0]);

system.out.println(arrays.tostring(numarray));
// 输出: [1, 2, 3, 4, 5]

示例 2:set 转数组

set<string> set = new hashset<>(arrays.aslist("a", "b", "c"));
string[] arr = set.toarray(new string[0]);

system.out.println(arrays.tostring(arr));
// 输出: [a, b, c]

示例 3:使用方法引用(java 11+)

list<string> list = list.of("java", "kotlin", "scala");

// 使用方法引用创建新数组
string[] arr = list.toarray(string[]::new);

system.out.println(arrays.tostring(arr));
// 输出: [java, kotlin, scala]

示例 4:数组大小影响演示

list<string> list = list.of("a", "b", "c");

// 数组大小刚好
string[] arr1 = list.toarray(new string[3]);
system.out.println(arrays.tostring(arr1)); // [a, b, c]

// 数组大小过小
string[] arr2 = list.toarray(new string[1]); // 会创建新数组
system.out.println(arrays.tostring(arr2)); // [a, b, c]

// 数组大小过大
string[] arr3 = list.toarray(new string[5]);
system.out.println(arrays.tostring(arr3)); // [a, b, c, null, null]

五、数组转集合(反向操作)

除了 toarray(),我们也常常需要把数组变成集合,可以使用:

string[] arr = {"a", "b", "c"};
list<string> list = arrays.aslist(arr);
system.out.println(list); // [a, b, c]

⚠️ 注意:
arrays.aslist() 返回的是一个定长列表,不能添加或删除元素。

如果需要可变集合:

list<string> list = new arraylist<>(arrays.aslist(arr));
list.add("d"); // ✅

六、常见错误与注意事项 ⚠️

错误场景问题说明正确做法
(string[]) list.toarray()会抛出类型转换异常list.toarray(new string[0])
数组大小过小自动创建新数组✅ 安全
数组大小过大多余部分会置 null注意空指针判断
修改数组不影响集合二者是独立的toarray() 复制数据
arrays.aslist() 不可添加删除元素固定长度用 new arraylist<>(...)

七、性能小贴士

  • 对于频繁转换的场景(尤其是大集合),建议使用:
list.toarray(new string[list.size()]);

避免额外的数组分配操作。

  • 对于小集合或不确定大小,推荐:
list.toarray(new string[0]);

更简洁、安全。

jvm 对 new t[0] 模式已有优化(jdk 11+ 性能与预分配数组几乎无差异)。

八、总结表

方法返回类型是否安全适用场景
toarray()object[]否(需强转)快速调试或简单场景
toarray(t[] a)t[]✅ 是泛型集合转换
toarray(string[]::new)t[]✅ 推荐java 11+ 优雅写法

到此这篇关于java toarray() 方法 的使用的文章就介绍到这了,更多相关java toarray() 内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com