日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java ArrayList转数组

發布時間:2024/9/19 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 wangwu

toArray(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 wangwu

toArray(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转数组的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。