文档章节

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

YuanyuanL
 YuanyuanL
发布于 2015/10/19 17:06
字数 388
阅读 304
收藏 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

粉丝 152
博文 322
码字总数 188376
作品 0
济南
部门经理
私信 提问
JSON-lib框架,转换JSON、XML

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

五大三粗
2015/11/03
0
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
Java中List转换为数组,数组转List

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

JayPark不作死
2014/11/24
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 I/O : Java中的进制详解

作者:李强强 上一篇,泥瓦匠基础地讲了下Java I/O : Bit Operation 位运算。这一讲,泥瓦匠带你走进Java中的进制详解。 一、引子 在Java世界里,99%的工作都是处理这高层。那么二进制,字节...

泥沙砖瓦浆木匠
2015/06/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring源码学习笔记-1-Resource

打算补下基础,学习下Spring源码,参考书籍是《Spring源码深度解析》,使用版本是Spring 3.2.x,本来想试图用脑图记录的,发现代码部分不好贴,还是作罢,这里只大略记录下想法,不写太细了 ...

zypy333
今天
10
0
RestClientUtil和ConfigRestClientUtil区别说明

RestClientUtil directly executes the DSL defined in the code. ConfigRestClientUtil gets the DSL defined in the configuration file by the DSL name and executes it. RestClientUtil......

bboss
今天
17
0

中国龙-扬科
昨天
2
0
Linux系统设置全局的默认网络代理

更改全局配置文件/etc/profile all_proxy="all_proxy=socks://rahowviahva.ml:80/"ftp_proxy="ftp_proxy=http://rahowviahva.ml:80/"http_proxy="http_proxy=http://rahowviahva.ml:80/"......

临江仙卜算子
昨天
10
0
java框架学习日志-6(bean作用域和自动装配)

本章补充bean的作用域和自动装配 bean作用域 之前提到可以用scope来设置单例模式 <bean id="type" class="cn.dota2.tpye.Type" scope="singleton"></bean> 除此之外还有几种用法 singleton:......

白话
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部