參考鏈接: Java中的Array vs ArrayList
先看一個小的代碼片段?
? ? ? ? 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轉成Array的時候,都是調用 Bean arr[] = list.toArray(new Bean[0]);這樣的一句代碼去完成的。?
但是,稍微看一下就會有點奇怪,為什么傳入的參數是 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;
? ? }
?
源碼寫的清清楚楚了,就是如果當前傳入的數組的長度小于當前list的長度,就直接返回一個新的數組。?
而如果傳入的數組長度大于list長度,前面的復制進來了。數組后面的元素從size開始,都是 null 了。