List.toArray的使用

来源:互联网 发布:java线程与进程的 编辑:程序博客网 时间:2024/05/18 21:07
首先,int 与 Integer类之间可以互用,如下代码合法:

int z = 1;
Integer zz =  new Integer(2);
z = zz; //or zz = z;
System.out.println(z /*or zz*/);


其次,int[ ] 与 Integer[ ]之间不能互用。


言归正传


如贴图所示,toArray方法有两个重载,返回值分别为Object[] 与 T[]。

两个方法源码及解释如示:

toArray()

说明:ArrayList 实例转换为。
源码解释:直接调用Arrays类的copyOf。
public Object[] toArray() {  
return Arrays.copyOf(elementData, size);  
}  

toArray(T[] a)

说明:将ArrayList里面的元素赋值到一个数组中去
源码解释:如果a的长度小于ArrayList的长度,直接调用Arrays类的copyOf,返回一个比a数组长度要大的新数组,里面元素就是ArrayList里面的元素;如果a的长度比ArrayList的长度大,那么就调用System.arraycopy,将ArrayList的elementData数组赋值到a数组,然后把a数组的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;   }    

因为int是基础类,所以无论如何都无法用toArray方法将List内的元素直接转为int数组。

List<Integer> lists = new LinkedList<Integer>();
在声明List并向其中添加元素后,可以采取如下方法使用toArray方法:
Integer[] rd = (Integer[]) lists.toArray(new Integer[lists.size()]);
其中(Integer[])不必要,无需再进行类型转换,但使用Integer[] c =(Integer[])intList.toArray();会报错,因为Objec[]不能直接转化成Integer[]。以下方法也可:
Integer[] rd = new Integer[lists.size()];Integer[] rd2= new Integer[1];rd = lists.toArray(rd2);//or rd = lists.toArray(rd);



0 0
原创粉丝点击