Java中List類的toArray()方法
阿新 • • 發佈:2022-05-09
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] */