正确使用List.toArray()(转)

在程序中,往往得到一个List, 程序要求对应赋值给一个array,

可以这样写程序:

for example:

Long [] l = new Long[list.size()];

for(int i=0;i<list.size();i++)

l[i] = (Long) list.get(i);

要写这些code,似乎比较繁琐,

其实List提供了toArray()的方法,但是要使用不好,就会有ClassCastException

究竟这个是如何产生的,且看代码:

-----------------------------------------------------------------------------------
        List list = new ArrayList();
        list.add(new Long(1));list.add(new Long(2));
        list.add(new Long(3));list.add(new Long(4));
        Long[] l = (Long[])list.toArray();
        for(int i=0; i<l.length; i++)
            System.out.println(l[i].longValue());
-----------------------------------------------------------------------------------
红色代码会抛java.lang.ClassCastException。

当然,为了读出值来,你可以这样code:
-----------------------------------------------------------------------------------
        Object [] a =  list.toArray();
        for(int i=0;i<a.length;i++)
            System.out.println(((Long)a[i]).longValue());
-----------------------------------------------------------------------------------
但是让数组丢失了类型信息,这个不是我们想要得。:(

正确使用方式:

-----------------------------------------------------------------------------------
1. Long[] l = new Long[<total size>];
   list.toArray(l);

2. Long[] l = (Long []) list.toArray(new Long[0]);

3. Long [] a = new Long[<total size>];
    Long [] l = (Long []) list.toArray(a);
-----------------------------------------------------------------------------------

java sdk doc 上讲:

public Object[] toArray(Object[] a)

a--the array into which the elements of this list are to be stored, if it is big enough; otherwise, a new array of the same runtime type is allocated for this purpose.

如果这个数组a足够大,就会把数据全放进去,返回的数组也是指向这个数组;

要是不够大,就申请一个跟参数同样类型的数组,把值放进去,然后返回。

注意的是:你要是传入的参数为9个大小,而list里面有5个object,那么其他的四个很可能是null , 使用的时候要注意。

http://blog.csdn.net/lliei/article/details/302232;

时间: 2025-01-17 21:31:46

正确使用List.toArray()(转)的相关文章

Object[]数组的转换问题

1.为了方面按列作外循环,想把ArrayList构造成一个二维数组,如下: ...... ArrayList result=GetResult(); int n=result.size(); String[][] myArray=new String[n][];//定义二维数组   for (int i=0;i<n;i++) //构造二维数组  {    ArrayListtempArray= (ArrayList)result.get(i);   myArray[i]=(String[])te

ASPNET MVC如何正确的中断请求?

以前在aspnet中一直是Response.End(); 在这之后的当前请求应有的代码都不会执行了, 但是在aspnetmvc中,就算调用Response.End();还是会执行! 如果你在action中的逻辑需要中断,你可以变通的通过逻辑判断来中断, 比如 if(ok) { //应有的逻辑 } else { //中断 } //或者 if(!ok) return Content("NO"); 但是如果是在过滤器中 protected virtual void OnActionExecu

RSA 分段加解密【解决“不正确的长度”的异常】

方法1: RSA 是常用的非对称加密算法.最近使用时却出现了“不正确的长度”的异常,研究发现是由于待加密的数据超长所致. .NET Framework 中提供的 RSA 算法规定: 待加密的字节数不能超过密钥的长度值除以 8 再减去 11(即:RSACryptoServiceProvider.KeySize / 8 - 11),而加密后得到密文的字节数,正好是密钥的长度值除以 8(即:RSACryptoServiceProvider.KeySize / 8). 所以,如果要加密较长的数据,则可以

Android PermissionUtils:运行时权限工具类及申请权限的正确姿势

Android PermissionUtils:运行时权限工具类及申请权限的正确姿势 ifadai 关注 2017.06.16 16:22* 字数 318 阅读 3637评论 1喜欢 6 PermissionUtil 经常写Android运行时权限申请代码,每次都是复制过来之后,改一下权限字符串就用,把代码搞得乱糟糟的,于是便有了封装工具类的想法,话不多说,先看怎么用: 工具类及Demo:github 简洁版申请权限 申请一个权限: PermissionUtils.checkAndRequest

正确使用AES对称加密

正确使用AES对称加密 经常我看到项目中有人使用了对称加密算法,用来加密客户或项目传输中的部分数据.但我注意到开发 人员由于不熟悉原理,或者简单复制网上的代码示例,有导致代码存在安全风险. 我经常遇到的问题,有如下: 如使用了过时的加密算法(如DES) 设置了不安全的加密模式(ECB) 不正确地处理初始向量(IV) 对称加密算法 算法 位长 建议 RC4 40 DES 56 3DES 112 AES 128 ? TL;DR: RC4/DES/3DES都 不符合 加密/破解的安全性要求. DES是

【转载】如何正确使用cnblogsCSS定制

转自:http://www.cnblogs.com/rvalue/p/7265386.html 用过cnblogs的估计都知道cnblogs提供了相对比较开放的个性化选项,其中最为突出的估计就是页面CSS定制了.但是没学过Web前端的人可能并不会用这个东西... 所以我打算在此分享一些定制CSS过程中使用的奇技淫巧一些方法来帮助大家定制blog qwq 以后如果想到新的主意或者更好的表述的话估计还会回来更新一波...本博文不定期更新吧w 博主并非专业Web开发,所以可能有些语言不够严谨或者不够准

TensorFlow【机器学习】:如何正确的掌握Google深度学习框架TensorFlow(第二代分布式机器学习系统)?

本文标签:   机器学习 TensorFlow Google深度学习框架 分布式机器学习 唐源 VGG REST   服务器 自 2015 年底开源到如今更快.更灵活.更方便的 1.0 版本正式发布,由 Google 推出的第二代分布式机器学习系统 TensorFlow一直在为我们带来惊喜,一方面是技术层面持续的迭代演进,从分布式版本.服务框架 TensorFlow Serving.上层封装 TF.Learn 到 Windows 支持.JIT 编译器 XLA.动态计算图框架 Fold 等,以及

程序员取悦女朋友的正确姿势---Tips(iOS美容篇)

前言 女孩子都喜欢用美图工具进行图片美容,近来无事时,特意为某人写了个自定义图片滤镜生成器,安装到手机即可完成自定义滤镜渲染照片.app独一无二,虽简亦繁. JH定律:魔镜:最漂亮的女人是你老婆魔镜:程序员不是木头人 核心技术 图片滤镜核心技术的基本思路如下: 核心技术流程 具体流程 1.创建一个图像处理工具类 注:该类实例包括一个图像处理方法,该方法在传入原始图像和一个颜色矩阵后生成一个处理好的图像. @interface JHFeilterManager : NSObject @proper

Razor:从aspx到cshtml常见错误及正确书写方法

http://blog.csdn.net/cheny_com/article/details/6298496 从aspx转到chshtml还是有很多要适应的地方的,本帖是个人学习笔记帖不断更新.每天开着本帖编程. 按第一个有意义的编译错误的首字母排序,便于查找: Cannot implicitly convert type 'void' to 'object' 错误:@Html.RenderPartial("_XXXX", Model); 正确:@{Html.RenderPartial