正确使用List.toArray()

转载 2006年05月22日 17:43:00
正确使用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 , 使用的时候要注意。

List的toArray方法强制转换

List容器类中有一个toArray()的方法,该方法是用来把List转化为数组的。 这个方法有一个特点就是转化出来的数组是复制了原数据的一个副本而不只是原数据的一个引用。因此我们可以放心的更改这些...
  • YimBa
  • YimBa
  • 2017年11月16日 14:29
  • 151

使用svn的合理姿势

使用svn的合理姿势何为合理的姿势我将svn的使用指南起这样一个名字,是因为很多公司使用svn作为版本管理工具(虽然git更好用),可以说我们每天都在使用svn,但我们使用的真的合理吗。要回答这个问题...
  • u012515915
  • u012515915
  • 2016年05月23日 22:20
  • 375

Android Handler正确使用姿势

Android Handler正确使用姿势
  • geanwen
  • geanwen
  • 2017年01月08日 15:14
  • 1106

如何正确使用枚举

枚举类型
  • Goyakod
  • Goyakod
  • 2016年05月16日 22:21
  • 293

scanf的正确使用及技巧

它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。 使用scanf函数时要加上#include stdio.h>。 首先从键盘读入键盘缓冲区(buffer)的数据都是以ASC...
  • qq_33531400
  • qq_33531400
  • 2016年07月14日 14:17
  • 309

List.toArray()方法的源码分析

写程序看到了这样一段代码: ……… List masterKeys = getMasterKeys(masterTable); //主键 String[] keys = masterKeys.toAr...
  • SouL_EateL
  • SouL_EateL
  • 2015年10月23日 15:36
  • 273

Java 理论与实践: 正确使用 Volatile 变量

转载于:http://www.ibm.com/developerworks/cn/java/j-jtp06197.html Java 语言中的 volatile 变量可以被看作是一种 “程度较轻的...
  • zgmzyr
  • zgmzyr
  • 2013年06月22日 11:48
  • 4387

如何使用List.toArray()转换为数组对象

如何使用List.toArray()转换为数组对象 博客分类:  java JSPServlet  在程序中,我们往往习惯使用List这种集合类,但是程序中却要求需要传递一个数...
  • evilcry2012
  • evilcry2012
  • 2016年03月17日 20:00
  • 156

Git远程操作的正确姿势

一直用的sourceTree软件图像化操作的git,但是觉得很多git远程操作命令还是很有必要的 Git有很多优势,其中之一就是远程操作非常简便。本文详细介绍5个Git命令,它们的概念和用法...
  • u011650048
  • u011650048
  • 2016年07月21日 10:24
  • 322

如何正确使用html基本标签

比如那些需要读屏软件的用户。作为一个前端,我们又怎么会忍心呢。之前就一直想写这样的一篇文章,分享一下如何去创造一个可访问性更好的页面。今天的计划里有一条把 HTML Tag 和 WCAG标准结合起...
  • leng0920
  • leng0920
  • 2016年09月02日 10:06
  • 809
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:正确使用List.toArray()
举报原因:
原因补充:

(最多只允许输入30个字)