[转载] Java ArrayList toArray(T[] a) 解惑
參考鏈接: Java中的Array vs ArrayList
先看一個(gè)小的代碼片段?
? ? ? ? ArrayList<Integer> arrayList = new ArrayList<>();
? ? ? ? Collections.addAll(arrayList, 11, 21, 31, 41, 51);
?
? ? ? ? Integer[] a = new Integer[0];
? ? ? ? Integer[] b = new Integer[arrayList.size()];
? ? ? ? Integer[] toArray = arrayList.toArray(a);
?
? ? ? ? System.err.println(Arrays.toString(toArray));
? ? ? ? Integer[] toArray1 = arrayList.toArray(b);
?
? ? ? ? System.err.println("a = "+Arrays.toString(a) +" , b="+Arrays.toString(b));
? ? ? ? System.err.println("xxx "+(Arrays.equals(toArray, toArray1)));? // true?
?
一般在需要將List轉(zhuǎn)成Array的時(shí)候,都是調(diào)用 Bean arr[] = list.toArray(new Bean[0]);這樣的一句代碼去完成的。?
但是,稍微看一下就會(huì)有點(diǎn)奇怪,為什么傳入的參數(shù)是 new Bean[0] ,而不是 new Bean[list.size()] ??
?
?其中兩種情況下返回的值是相同的。!?
?
but why ????
// java.util.ArrayList#toArray(T[])
?
? ? 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;
? ? }
?
源碼寫的清清楚楚了,就是如果當(dāng)前傳入的數(shù)組的長(zhǎng)度小于當(dāng)前l(fā)ist的長(zhǎng)度,就直接返回一個(gè)新的數(shù)組。?
而如果傳入的數(shù)組長(zhǎng)度大于list長(zhǎng)度,前面的復(fù)制進(jìn)來了。數(shù)組后面的元素從size開始,都是 null 了。
總結(jié)
以上是生活随笔為你收集整理的[转载] Java ArrayList toArray(T[] a) 解惑的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 朵朵糖故事机器人怎么更新_“故事贩卖机”
- 下一篇: java美元兑换,(Java实现) 美元