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