Java List.toArray()方法:為什么傳入數組長度大于List長度時,結果并非全部填充null?

Java List.toArray()方法:為什么傳入數組長度大于List長度時,結果并非全部填充null?

深入剖析Java List.toArray(T[] a)方法的工作機制

在Java開發中,List.toArray(T[] a)方法是將List集合轉換為數組的常用手段。然而,其運行機制并非總是那么直觀。本文將深入探討該方法的內部原理,并解釋一個常見的誤解。

讓我們來看一個例子:

List<Integer> list = List.of(12, 34, 56); Integer[] array = list.toArray(new Integer[]{1, 2, 1, 43, 32, 1}); System.out.println(Arrays.toString(array));

這段代碼的輸出結果是[12, 34, 56, NULL, 32, 1],這與許多開發者預期的[12, 34, 56, null, null, null]有所不同。為什么會這樣呢?

立即學習Java免費學習筆記(深入)”;

關鍵在于List.toArray(T[] a)方法的實現細節。Java文檔指出,如果傳入的數組長度大于List的元素數量,則List元素復制到數組后,緊隨其后的數組第一個元素將被設置為null。 并非所有剩余元素都將被填充為null。

讓我們觀察ArrayList的源碼片段(雖然List.of()創建的列表并非ArrayList,但其toArray方法的邏輯類似):

@SuppressWarnings("unchecked") public <T> T[] toArray(T[] a) {     if (a.length > size) // 如果數組長度大于列表大小         a[size] = null; // 將列表元素之后數組的第一個元素設置為null     return a; }

這段代碼清楚地表明,當傳入數組長度超過List長度時,只有緊跟在List元素后的第一個數組元素會被賦值為null。

回到之前的例子,List.of(12, 34, 56)包含三個元素,而傳入的數組new Integer[]{1, 2, 1, 43, 32, 1}長度為六。toArray方法將12, 34, 56復制到數組的前三個位置,并將第四個位置設置為null,其余元素保持原樣,最終結果為[12, 34, 56, null, 32, 1]。這與Java文檔的描述完全一致。

因此,理解List.toArray(T[] a)方法的這一特性對于避免潛在的編程錯誤至關重要。只有在充分了解傳入數組大小和List元素數量關系的情況下,才能正確解讀和利用該方法的返回值。

以上就是Java List.toArray()方法:

? 版權聲明
THE END
喜歡就支持一下吧
點贊9 分享