文档章节

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

YuanyuanL
 YuanyuanL
发布于 2015/10/19 17:06
字数 388
阅读 297
收藏 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
博文 320
码字总数 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

没有更多内容

加载失败,请刷新页面

加载更多

Ubuntu18.04 安装最新版WPS

1.手动卸载libreoffice:sudo apt-get remove --purge libreoffice* 2.官网下载WPS和字体: WPS:http://wps-community.org/download.html 字体:http://wps-community.org/download.html?vl......

AI_SKI
36分钟前
3
0
数据结构(算法)-图(深度优先搜索 DFS)

#include <iostream>using namespace std;#define MaxVex 30typedef char VertexType;typedef struct vexNode adjList[MaxVex];struct edgeNode{int adjvex;//邻接点......

ashuo
41分钟前
0
0
1024 搞事倒计时!距程序员节还有 2 天!

详情请关注微信公众号:七牛云

七牛云
42分钟前
0
0
Java泛型方法

1. 定义泛型方法 (1) 如果你定义了一个泛型(类、接口),那么Java规定,你不能在所有的静态方法、静态初块等所有静态内容中使用泛型的类型参数。例如: public class A<T> { public st...

两广总督bogang
42分钟前
1
0
如何解决JavaScript中0.1+0.2不等于0.3

console.log(0.1+0.2===0.3)// true or false??   在正常的数学逻辑思维中,0.1+0.2=0.3这个逻辑是正确的,但是在JavaScript中0.1+0.2!==0.3,这是为什么呢?这个问题也会偶尔被用来当...

peakedness丶
42分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部