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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java数组与List 相互转换方法详解

發布時間:2025/1/21 java 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

需要注意的是:

  • 我們這里用的數組類型是Integer而不是int,用int直接出錯,也就是說只能用基本數據類型的包裝類型,才能直接轉為List

    這是為嘛呢?看Arrays.asList的源碼,
  • @SafeVarargs@SuppressWarnings("varargs")public static <T> List<T> asList(T... a) {return new ArrayList<>(a);}

    其中<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[ ]顯然不合理)

    然而這樣卻是對的

  • 另外用Arrays.asList()方法轉換后的List并不是原汁原味的java.util.ArrayList類型,不能對轉換后的List增刪,只能查改。這是因為Arrays.asList()返回值是java.util.Arrays類中一個私有靜態內部類java.util.Arrays.ArrayList,它并非java.util.ArrayList類。java.util.Arrays.ArrayList類具有 set(),get(),contains()等方法,但是不具有添加add()或刪除remove()方法,所以調用add()、remove()方法會報錯。
    可以通過這種方法來解決這種問題
  • List<Integer> list = new ArrayList<>(Arrays.asList(arr));

    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 相互转换方法详解的全部內容,希望文章能夠幫你解決所遇到的問題。

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