List转数组toArray方法
生活随笔
收集整理的這篇文章主要介紹了
List转数组toArray方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、List.toArray方法
?
List提供了一個將List轉為數組的一個非常方便的方法toArray。toArray有兩個重載的方法:
| ?Object[] | toArray() ??????????返回按適當順序包含列表中的所有元素的數組(從第一個元素到最后一個元素)。 |
| <T> T[] | toArray(T[]?a) ??????????返回按適當順序(從第一個元素到最后一個元素)包含列表中所有元素的數組;返回數組的運行時類型是指定數組的運行時類型。 |
第一種重載方法,是將list直接轉為Object[] 數組,并不是數組的原類型;
第二種方法是將list轉化為你所需要類型的數組,當然我們用的時候會轉化為與list內容相同的類型。
?
二、toArray編程規則
(1)?Object[] toArray()方法
List list = new ArrayList(); list.add(new Student()); list.add(new Student()); list.add(new Student()); Student[] s = (Student[]) list.toArray();運行程序會拋出異常:java.lang.ClassCastException
?
(2)T[]?toArray(T[] a)方法 ? ?如果a數組的長度小于原數組的長度,則重新分配空間復制并返回,否則使用a數組復制并返回
List list = new ArrayList(); list.add(new Student()); list.add(new Student()); list.add(new Student()); Student[] student = (Student[]) list.toArray(new Student[0]);運行結果正確
?
三、ArrayList toArray方法源碼
(1)Object[] toArray()方法
public Object[] toArray() {return Arrays.copyOf(elementData, size); }?Arrays類copyOf方法
public static <T> T[] copyOf(T[] original, int newLength) {return (T[]) copyOf(original, newLength, original.getClass());}public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType) {//判斷類型是否為Object[]類型T[] copy = ((Object)newType == (Object)Object[].class)//Object[]類型實例化? (T[]) new Object[newLength]//非Object[]類型實例化: (T[]) Array.newInstance(newType.getComponentType(), newLength);//復制數組System.arraycopy(original, 0, copy, 0, Math.min(original.length, newLength));return copy; }?
(2)?T[]?toArray(T[] a)方法
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);//舊數組長度作為索引,指向新數組的空間賦值為nullif (a.length > size)a[size] = null;return a;}?
?
?
總結
以上是生活随笔為你收集整理的List转数组toArray方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 幻想小勇士超长详细攻略?
- 下一篇: Util包中Arrays