请输入您要查询的百科知识:

 

词条 toArray
释义

ArrayList.toArray()的用法

当使用ArrayList时,有时想获得一个实际的数组,这个数组包含了列表的内容。

可以通过调用方法toArray()来实现。

示例:

package bo;

import java.util.ArrayList;

public class ToArrayTest {

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

ArrayList<Integer> al = new ArrayList<Integer>();

al.add(new Integer(1));

al.add(new Integer(2));

al.add(new Integer(3));

al.add(new Integer(4));

al.add(new Integer(5));

System.out.println("al中元素:" + al);

//获得数组

Object ia[] = al.toArray();

//遍历数组

for(int i=0; i<ia.length; i++){

System.out.println(ia[i] + " ");

}       

}

}

运行结果:

al中元素:[1, 2, 3, 4, 5]

1

2

3

4

5

List提供了toArray()的方法,但是要使用不好,就会有ClassCastException异常究竟这个是如何产生的,且看代码:

首先咱们来看看下面的代码:

ArrayList<String []> arr = new ArrayList<String []>();

arr.add(new String[]{"a","b"});

arr.add(new String[]{"c","d"});

String [][] str_a = (String[][]) arr.toArray();//这几行代码会有ClassCaseException异常

执行上面这几行代码 会有ClassCaseException异常

咱们再来看下面几行代码:

ArrayList<String []> arr = new ArrayList<String []>();

arr.add(new String[]{"a","b"});

arr.add(new String[]{"c","d"});

String [][] str_a = (String[][]) arr.toArray(new String[0][0]);

执行上面的代码就完全OK了

会抛java.lang.ClassCastException。

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

public Object[] toArray() {

return Arrays.copyOf(elementData, size);

}

public <T> T[] toArray(T[] a) {

if (a.length < size)

// Make a new array of a's runtime type, but my contents:

return (T[]) Arrays.copyOf(elementData, size, a.getClass());

System.arraycopy(elementData, 0, a, 0, size);

if (a.length > size)

a[size] = null;

return a;

}

可以看出,不带参数的toArray()方法,是构造的一个Object数组,然后进行数据copy,此时进行转型就会产生ClassCastException

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

正确的方式

1. String[][] str_a = (String [][]) arr.toArray(new String[0][0]);

2. String[][] a = new String[<size>][size];

String [][] str_a = (String [][]) arr.toArray(a);

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

随便看

 

百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2025/2/15 1:31:52