文档章节

Java中list转成数组的方法 java.util.List.toArray()

YuanyuanL
 YuanyuanL
发布于 2015/10/19 17:06
字数 388
阅读 290
收藏 0

   Java中list转成数组,有一个方法 java.util.List.toArray(),他在使用中常遇到的几种情况如下:  

  1.错误的方式

private void onButtonListToArrayClick() 
{  
    // Array--->List  
    String[] strArray = new String[] { "aa", "bb" };  
    List<String> list = new ArrayList<String>(Arrays.asList(strArray));  
    list.add("cc");  
    // List--->Array  
    String[] strArray2;  
    try
    {  
        strArray2 = (String[]) list.toArray();  
    } catch (Exception e) 
    {  
        Log.i("ToArray", "failure:" + e.getMessage());  
    } 
}

异常发生,原因为list.toArray()返回的是Object类型,强制转换的时候发生ClassCastException。


2.正确的方式

private void onButtonListToArrayClick() 
{  
    // Array--->List  
    String[] strArray = new String[] { "aa", "bb" };  
    List<String> list = new ArrayList<String>(Arrays.asList(strArray));  
    list.add("cc");  
    // List--->Array  
    String[] strArray2 = null;  
    try 
    {  
        strArray2 = list.toArray(new String[0]);  
    } catch (Exception e) 
    {  
        Log.i("ToArray", "failure:" + e.getMessage());  
    }  
    for (String element : strArray2) 
    {  
        Log.i("ToArray", "strArray2:" + element);  
    }  
}

运行得到结果:aa和bb。

上面的方法

strArray2 = list.toArray(new String[0]);

与下面的方法一样

strArray2 = new String[list.size()];  
strArray2 = list.toArray(strArray2);


3.toArray()两种是方法发源码比较:

下面是ArrayList的两个toArray()方法的源代码:

public Object[] toArray()
{   
   Object[] result = new Object[size];     
   System.arraycopy(elementData, 0, result, 0, size);     
   return result;   
}
public Object[] toArray(Object a[]) 
{     
if (a.length < size)         
a = (Object[])java.lang.reflect.Array.newInstance(a.getClass().getComponentType(), size); 
System.arraycopy(elementData, 0, a, 0, size);     
if (a.length > size)         
a[size] = null;     
return a;   
}

①不带参数的toArray方法,是构造的一个Object数组,然后进行数据拷贝,此时进行转型就会产生ClassCastException 

②带参数的toArray方法,则是根据参数数组的类型,构造了一个对应类型的,长度跟ArrayList的size一致的空数组,虽然方法本身还是以 Object数组的形式返回结果,不过由于构造数组使用的ComponentType跟需要转型的ComponentType一致,就不会产生转型异常


本文转载自:http://blog.csdn.net/gh102/article/details/7301051

共有 人打赏支持
YuanyuanL

YuanyuanL

粉丝 153
博文 319
码字总数 187682
作品 0
济南
部门经理
JSON-lib框架,转换JSON、XML不再困难

JSON-lib框架,转换JSON、XML不再困难 Json-lib可以将Java对象转成json格式的字符串,也可以将Java对象转换成xml格式的文档,同样可以将json字符串转换成Java对象或是将xml字符串转换成Java对...

DavidBao
2015/05/01
0
0
JSON-lib框架,转换JSON、XML

Json-lib可以将Java对象转成json格式的字符串,也可以将Java对象转换成xml格式的文档,同样可以将json字符串转换成Java对象或是将xml字符串转换成Java对象。 一、 准备工作 1、 首先要去官方...

五大三粗
2015/11/03
0
0
Java中List转换为数组,数组转List

今天写代码遇到一个奇怪的问题,具体代码不贴出了,写一个简化的版本。如下: ArrayList<String> list=new ArrayList<String>(); String strings[]=(String [])list.toArray(); 这样写代码个...

Idiot_s_Sky
2014/02/05
0
0
Java中List转换为数组,数组转List

今天写代码遇到一个奇怪的问题,具体代码不贴出了,写一个简化的版本。如下: ArrayList<String> list=new ArrayList<String>(); String strings[]=(String [])list.toArray(); 这样写代码个...

JayPark不作死
2014/11/24
0
0
Initialization & Cleanup

方法重载(overload)参数为基本类型的情况 方法重载时如果一系列名字相同的方法接受的参数的类型是不一样的基本类型,那么重载方法的选择规则是,将接收的参数一级一级向上提升,直到找到合适...

meisme
2013/06/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

谷歌 Fuchsia 上手体验,将取代Android/win10

在手机市场领域,Google表现很抢眼,毫无疑问,Android 至今在移动操作系统的市场份额占据绝对领先地位,但是 Android 仍然存在不少问题,碎片化问题严重,在平板以及大屏幕设备上表现糟糕,...

linux-tao
16分钟前
1
0
List、Array与ArrayList

数组在内存中是连续存储的,所以它的索引速度很快,而且赋值和修改元素也非常快,比如: string[] s=new string[3];//赋值 s[0]="a"; s[1]="b"; s[2]="c";//修改 s[1]="b1"; 但是数组...

shimmerkaiye
18分钟前
0
0
Linux 的Lnmp环境下为mysql添加环境变量

一.问题 在Linux 安装完Lnmp 环境后 , 连接Mysql 告诉没有这条命令 mysql -uroot -p 命令失效 因为是源码安装的,所以会出现这样的的原因 。集成环境是不会出现的。 其实很简单,只需要给m...

15834278076
20分钟前
2
0
apolloxlua include函数

include函数不是单独使用的函数, 他并不是标准库的一部分, 你可以使用include函数将某个后缀为 .aop的文档包含到你的文档流中。 因为include是单独处理流, 所以不会在主处理流程中有所表示...

钟元OSS
24分钟前
0
0
【转载分享】做一名较真的工程师

近些年与我共事过的同事,一定知道我至今仍有一个较真的性格。我会:指出同事所写代码的不当命名问题(并帮助改进);指出同事所写文档中的逻辑混乱问题(并辅以修订);指出同事所写PPT中乱...

HellerZhang
25分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部