4 回答

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

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

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