toArray

toArray(),JAVA函式,當使用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();//這幾行代碼會有ClassCastException異常

執行上面這幾行代碼 會有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(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 , 使用的時候要注意。

相關詞條

相關搜尋

熱門詞條

聯絡我們