Java数组与List 相互转换方法详解
數組轉List:
通過遍歷賦值就不說了
1、 通過Arrays.asList()方法
public static void main(String[] args) throws Exception {Integer[] arr = {1, 2, 3, 4, 5};List<Integer> list = Arrays.asList(arr);System.out.println("通過Arrays.asList()方法:" + list);List<Integer> list2 = new ArrayList<>();Collections.addAll(list2,arr);System.out.println("通過Collections.addAll()方法:" + list2);} 通過Arrays.asList()方法:[1, 2, 3, 4, 5] 通過Collections.addAll()方法:[1, 2, 3, 4, 5]Process finished with exit code 0需要注意的是:
這是為嘛呢?看Arrays.asList的源碼,
其中<T> List<T> asList(T... a) 這是泛型的固定語法,第一個<T>是申明T為泛型,如果沒有這一項,編譯器無法解釋后面的兩個T是什么,因為Java中不存在T類型。T… a表明支持多參列表,比如
int[] arr = {1, 2, 3, 4, 5}; List<int[]> list = Arrays.asList(arr,arr);繼續上一個疑惑,原因是Arrays.asList() 需要傳入的參數類型是泛型中的通配類型 ,返回值類型List也需要與之匹配,并且所有的泛型必須是引用類型。因此傳入int[ ]類型的數組,由于int[ ] 整體可以看作一個引用類型,所以asList就把整個數組作為一個元素來存放到List中去,然而List中只能保存Integer類型的元素,所以報錯。(這樣說應該好理解一點吧,我開始還在疑惑為什么Integer[ ] 數組就可以,后來想的就是傳入的是數組,要返回的List也是數組形式,二者同級,存放的都是Integer元素這樣很匹配,,,而傳入int[ ]時數組是一個引用類型,傳入asList沒問題,但是這時只能看作整體來處理了,左邊Integer右邊int[ ]顯然不合理)
然而這樣卻是對的
可以通過這種方法來解決這種問題
2、通過 Collections.addAll()方法
上邊已經寫了Collections.addAll()方法如何使用,并且通過這種方式轉換后的List可以進行增刪,由于定義的就是原汁原味的List,只是利用Collections.addAll()方法將數組中元素添加進來,跟Arrays.asList()方法一樣需要保證數據類型統一。
List轉數組:
1、list.toArray()方法
public static void main(String[] args) throws Exception {Integer[] arr = {1, 2, 3, 4, 5};List<Integer> list = new ArrayList<>(Arrays.asList(arr));Object[] b = list.toArray();System.out.println("通過toArray()方法將List轉為Object類型數組:"+Arrays.toString(b));Integer[] a = (Integer[]) list.toArray(new Integer[]{});System.out.println("通過toArray()方法將List轉為Integer類型數組:"+Arrays.toString(a));}list.toArray()方法直接返回的是Object[ ]類型,如果需要前后轉換類型一樣,則需要通過Integer[] a = (Integer[]) list.toArray(new Integer[]{}); 有點復雜,誰讓它就這樣定義的呢
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;}參考
https://blog.csdn.net/x541211190/article/details/79597236?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param
總結
以上是生活随笔為你收集整理的Java数组与List 相互转换方法详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java枚举类使用 == 还是equal
- 下一篇: Java异常中受检异常非受检异常与Run