前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java List集合转数组的两种重载方法

Java List集合转数组的两种重载方法

作者头像
bisal
发布2021-09-06 14:15:42
2.1K0
发布2021-09-06 14:15:42
举报
文章被收录于专栏:bisal的个人杂货铺

前几天写代码碰到了这个场景,要将一个List转换成数组,

代码语言:javascript
复制
List list = new ArrayList();
...
list.add(...);
...
JSONObject obj = new JSONObject();
obj.put("result", list.toArray());

ArrayList提供了将List转为数组的简单方法toArray,他有两个重载的方法,

(1) list.toArray();,将list直接转为Object[]数组。

(2) list.toArray(T[] a);,将list转换为你所需要类型的数组,我们用的时候会转换为与list内容相同的类型。

像我这种不明真相的朋友,可能选择第一个,毕竟看着简单,

代码语言:javascript
复制
ArrayList list=new ArrayList();
for (int i = 0; i < 10; i++) {
    list.add(""+i);
}
String[] array= (String[]) list.toArray();

但是运行起来,就会提示,

代码语言:javascript
复制
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; 
cannot be cast to [Ljava.lang.String;

原因很清楚,不能将Object[]转换为String[],如果要转换,只可以取出每一个元素,再进行转换,因为在Java中的强制类型转换只是针对单个对象的,不能将整个数组转换成另外一种类型的数组,

代码语言:javascript
复制
Object[] arr = list.toArray();
for (int i = 0; i < arr.length; i++) {
    String e = (String) arr[i];
    System.out.println(e);
}

因此,我们转向第二种,

代码语言:javascript
复制
String[] array =new String[list.size()];
list.toArray(array);

最开始的示例,使用第二种重载,如下所示,

代码语言:javascript
复制
List list = new ArrayList();
...
list.add(...);
...
JSONObject obj = new JSONObject();
obj.put("result", list.toArray(new String[list.size()]));

从toArray()的help,我们看到,这种形式能准确地控制array的运行时类型,

Like the toArray() method, this method acts as bridge betweenarray-based and collection-based APIs. Further, this method allows precise control over the runtime type of the output array, and may,under certain circumstances, be used to save allocation costs

因此,当我们需要将集合转成数组的时候,尽量选择list.toArray(T[] a),避免不必要的类型转换错误。

近期更新的文章:

PG逻辑复制的REPLICA IDENTITY设置

最近碰到的几个问题

Linux的dd指令

Oracle、SQL Server和MySQL的隐式转换异同

JDK的版本号解惑

文章分类和索引:

公众号700篇文章分类和索引

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/07/28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档