1. 程式人生 > 其它 >Java中List類的toArray()方法

Java中List類的toArray()方法

1.list.toArray()方法不接收引數時, 返回一個Object陣列

// transient Object[] elementData; 存放list中的各個元素
// private int size; list中元素的個數
public Object[] toArray() {
    return Arrays.copyOf(elementData, size);
}

2.toArray(T[] a)方法接收T型別的陣列, 返回一個T型別的陣列 (常用)

public <T> T[] toArray(T[] a) {
	//如果傳入的陣列的長度小於list中的元素個數
    if (a.length < size)
	    //通過Arrays.copyOf()方法進行拷貝, 內部會建立一個T型別的陣列, 長度為size, 和a就沒有關係了
        return (T[]) Arrays.copyOf(elementData, size, a.getClass());
    //如果傳入的陣列的長度大於等於list中的元素個數, 那麼直接將elementData中的元素拷貝到a中
    System.arraycopy(elementData, 0, a, 0, size);
    //如果傳入的陣列的長度大於list中的元素個數, 將a[size]賦值為null, 這裡我有疑問, 不顯式賦值的話, a[size]也為null吧? 為什麼要加上這句呢?
    if (a.length > size)
        a[size] = null;
    return a;
}

toArray(T[] a)的使用示例

1 將list轉為一維陣列

List<String> list = new ArrayList<>();
list.add("flower");
list.add("dance");
list.add("is");
list.add("excellent");
//返回值型別和方法引數型別一致
//換句話說, 本來由list存各個String, 現在由String[]存各個String
//換句話說, 本來由list存各個String, 現在由String[]存各個String
//換句話說, 本來由list存各個String, 現在由String[]存各個String
//陣列的長度指定為0或者指定為list.size()都可以. 即使傳入的陣列長度不夠也沒關係, 會建立新陣列
String[] strs = list.toArray(new String[0]);
System.out.println(Arrays.toString(strs));
/*
列印結果
[flower, dance, is, excellent]
*/

//如果是轉成以為整型陣列, 得用stream(), 因為int不是引用型別, 例子:list.stream().mapToInt(k -> k).toArray()

2.將list轉為二維陣列

List<int[]> list = new ArrayList<>();
list.add(new int[]{1,2});
list.add(new int[]{4,5});
list.add(new int[]{7,9});
list.add(new int[]{11,15});
//返回值型別和方法引數一樣
//話句話說, 本來由list儲存各個int[], 現在由int[][]儲存各個int[]
//話句話說, 本來由list儲存各個int[], 現在由int[][]儲存各個int[]
//話句話說, 本來由list儲存各個int[], 現在由int[][]儲存各個int[]
//int[][]的長度指定為0或者指定為list.size()都可以. 
int[][] arr = list.toArray(new int[0][]);
for(int[] t : arr){
    System.out.println(Arrays.toString(t));
}
/*
列印結果
[1, 2]
[4, 5]
[7, 9]
[11, 15]
*/