当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

ArrayList.toArray()的用法

发表于: 2012-12-09   作者:codsoul   来源:转载   浏览:
摘要: ArrayList.toArray()的用法   当使用ArrayList时,有时想获得一个实际的数组,这个数组包含了列表的内容。   可以通过调用方法toArray()来实现。    示例:    package bo;    import java.util.ArrayList;    public class ToArrayTest {    /**   * @param arg
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 , 使用的时候要注意。

ArrayList.toArray()的用法

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号