java ArrayList转数组
生活随笔
收集整理的這篇文章主要介紹了
java ArrayList转数组
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前言
- jdk1.8
toArray()轉數組
import java.util.ArrayList;public class TestMain {public static void main(String[] args) {ArrayList<String> arrayList = new ArrayList<String>();arrayList.add("zhangsan");arrayList.add("lisi");arrayList.add("wangwu");Object[] arr = arrayList.toArray();for(Object item : arr) {System.out.println(item);}}}- 得到 Object[] 類型的數組
執行結果:
zhangsan lisi wangwutoArray(T[] a) 轉數組
import java.util.ArrayList;public class TestMain {public static void main(String[] args) {ArrayList<String> arrayList = new ArrayList<String>();arrayList.add("zhangsan");arrayList.add("lisi");arrayList.add("wangwu");String[] arr = arrayList.toArray(new String[0]);for(String item : arr) {System.out.println(item);}}}- 得到 String[] 類型的數組
執行結果:
zhangsan lisi wangwutoArray(T[] a) 的參數有什么用處?
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);if (a.length > size)a[size] = null;return a;}- if (a.length < size) : 參數a的長度是否小于本ArrayList的長度。
- 參數a的長度小于本ArrayList的長度:構造一個新的數組對象。新數組對象的長度與本ArrayList的長度相等,類型為參數a的類型。將本ArrayList的元素拷貝到新數組對象中,并返回新數組對象。
- 參數a的長度不小于本ArrayList的長度:將本ArrayList的元素拷貝到參數a中,并返回參數a。
toArray() 為什么得到 真·Object[] 類型的數組?
代碼1:
public Object[] toArray() {return Arrays.copyOf(elementData, size); }- elementData 參考代碼2
- Arrays.copyOf(elementData, size) 參考代碼3
- 根據代碼2可知,elementData為Object[]類型。根據代碼3可知,返回值的類型為Object[]類型。
- 因Arrays.copyOf(elementData, size)的返回值為Object[]類型,toArray()的返回值也為Object[]類型(此處不存在類型轉換的情況)。因此toArray()得到的數組,不可以強制轉換成其它類型(String[] array= (String[]) list.toArray();會報錯 [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;,即使list對象的定義為ArrayList<String> list=new ArrayList<String>();)。
代碼2:
/*** The array buffer into which the elements of the ArrayList are stored.* The capacity of the ArrayList is the length of this array buffer. Any* empty ArrayList with elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA* will be expanded to DEFAULT_CAPACITY when the first element is added.*/transient Object[] elementData; // non-private to simplify nested class access- elementData 是ArrayList類中的屬性,該屬性用于存儲ArrayList對象的數據
代碼3:
public static <T> T[] copyOf(T[] original, int newLength) {return (T[]) copyOf(original, newLength, original.getClass());}- 復制 original 數組,且返回值類型與original類型一致
- copyOf(original, newLength, original.getClass()) 參考代碼4
- 根據代碼1和代碼可知,original 是 Object[] 類型,因此,此處的返回值為 Object[] 類型
代碼4:
public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType) {@SuppressWarnings("unchecked")T[] copy = ((Object)newType == (Object)Object[].class)? (T[]) new Object[newLength]: (T[]) Array.newInstance(newType.getComponentType(), newLength);System.arraycopy(original, 0, copy, 0,Math.min(original.length, newLength));return copy;}- newType 是 Object[] 時,返回值是Object[]類型
- newType 不是 Object[] 時,返回值類型與 newType 類型一致
總結
以上是生活随笔為你收集整理的java ArrayList转数组的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java ArrayList排序
- 下一篇: java 字符串数组连接