4 回答

TA貢獻(xiàn)1807條經(jīng)驗 獲得超9個贊
我不知道為什么你認(rèn)為它應(yīng)該拋出ArrayIndexOutOfBoundsException
,因為文檔說不然:
如果列表適合指定的數(shù)組,則返回其中。否則,將使用指定數(shù)組的運行時類型和此列表的大小分配新數(shù)組。

TA貢獻(xiàn)1786條經(jīng)驗 獲得超11個贊
你應(yīng)該閱讀文檔:
toArray(T[])
:以適當(dāng)?shù)捻樞蚍祷匕肆斜碇兴性氐臄?shù)組(從第一個元素到最后一個元素)參數(shù):a - 要存儲此列表元素的數(shù)組(如果它足夠大); 否則,為此目的分配相同運行時類型的新數(shù)組。
因此,返回的數(shù)組始終包含列表的所有元素,因為如果傳遞的數(shù)組小于列表的大小,則會創(chuàng)建新數(shù)組。
如果您需要創(chuàng)建一個只包含部分元素的數(shù)組,您可以使用List.subList()
:
String[] array = list.subList(0, 3).toArray(new String[3]);

TA貢獻(xiàn)1875條經(jīng)驗 獲得超3個贊
這是因為toArray()
如有必要,會調(diào)整它的大小:
@SuppressWarnings("unchecked") 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; }
請注意該部分if (a.length < size)
,Array
如果您傳遞的部分不夠大,它將調(diào)整大小。因此,最好寫一下:
String[] str=al.toArray(new String[al.size()]);
添加回答
舉報