Java數組轉換為List的四種方式
第一種 Arrays.asList
即 Java.util 提供的 Arrays 中的 asList 方法,可以直接將一般的字符串數組以及包裝類后的結果做直接轉換。
需要注意的是 :通過這種方式得到的List 不能執(zhí)行增刪操作,否則會拋出java.lang.UnsupportedOperationException 異常,即不支持操作的異常,一般的獲取get, size等可以照常使用原
因 : Arrays.asList(str)返回值是java.util.Arrays類中一個私有靜態(tài)內部類 java.utiil.Arrays.Arraylist,不是我們平時用的java.util.ArrayList();
適用于 只轉換后作為讀取的目標,不能用于增刪操作
示例代碼如下:
// 引用類型
Integer[] cardNumberArray = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
String[] strings = {"dd", "aa", "545", "ee"};
// 基本類型
int[] cardNumberArrayInt = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
// 元素轉換成功
List<Integer> integers = Arrays.asList(cardNumberArray);
List<String> list = Arrays.asList(strings);
// 出現了基本類型
List<int[]> ints = Arrays.asList(cardNumberArrayInt);
// 執(zhí)行了添加操作 結果出錯
integers.add(15);同時可以看的出 上面如果直接使用了 int[] 這種基本類型, 轉換時并不是我們預期的 int 而且把 int[] 認為了是一個泛型中的基本類型,泛型中不支持基本數據類型,所以如果非要使用盡量轉為包裝類,除非只做基本的運算。
asList 返回的是一個視圖,簡單來說只能看和讀取,不能執(zhí)行其他操作
總的來說這種方式泛用性不是很強
第二種 ArrayList 構造方法
將第一種 Arrays.asList 的返回值作為 arrayList 夠構造方法的入參,即可構造出可以進行增刪操的正常 list代碼如下:
// 引用類型
Integer[] cardNumberArray = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
String[] strings = {"dd", "aa", "545", "ee"};
List<Integer> arrayList1 = new ArrayList<>(Arrays.asList(cardNumberArray));
List<String> arrayList2 = new ArrayList<>(Arrays.asList(strings));適用于 數組轉為需要執(zhí)行增刪等正常操作的 list,同時數據量不是太大
第三種 Collections.addAll
通過 Collections.addAll(要賦值的list, 原有l(wèi)ist);
同樣是 JDK 自帶的 Collections, 先創(chuàng)建一個對應的 list 并賦予原有數組長度,然后給與賦值Collections.addAll() 會將數組中的元素轉為二進制,然后添加到List中。這種方法 效率相對較高
示例代碼如下:
// 引用類型
Integer[] cardNumberArray = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
List arrayList = new ArrayList<>(cardNumberArray.length);
Collections.addAll(arrayList, cardNumberArray);第四種 JDK8 特性 Stream
JDK 1.8 支持的 基本類型轉換 int[],long[],double[]
不支持的 short[ ],byte[ ],char[]
示例代碼如下:
// 基本類型
int[] cardNumberArrayInt = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
List<Integer> collect1 = Arrays.stream(cardNumberArrayInt).boxed().collect(Collectors.toList());其他支持的 long[] 以及 double[] 與上面類似
同樣的引用類型也可以使用這種方式:
Integer[] cardNumberArray = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
List<Integer> collect = Arrays.stream(cardNumberArray).collect(Collectors.toList());引用類型與基礎類型相比 少了 boxed 這一過程,是一個轉包裝類的過程。對于Stream 不太熟悉的可以參考我的另一篇對 Stream 使用的描述
Java Stream map, Collectors(toMap, toList, toSet, groupingBy, collectingAndThen)等學習和使用理解及案例
到此這篇關于Java開發(fā)技巧 數組轉List的四種方式總結的文章就介紹到這了,更多相關java數組轉list內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SpringBoot啟動失敗的解決方法:A component required a&nb
這篇文章主要介紹了解決SpringBoot啟動失?。篈 component required a bean of type ‘xxxxxxx‘ that could not be found.,目前解決方法有兩種,一種是不注入bean的方式,另一種是使用@Component的方式,本文給大家詳細講解,需要的朋友可以參考下2023-02-02
Spring-基于Spring使用自定義注解及Aspect實現數據庫切換操作
這篇文章主要介紹了Spring-基于Spring使用自定義注解及Aspect實現數據庫切換操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09
Java?BigDecimal與RoundingMode最常用的用法總結
RoundingMode是Java中定義舍入行為的枚舉類,包括UP、DOWN、CEILING等8種模式,適用于精確數字運算,這篇文章主要介紹了Java?BigDecimal與RoundingMode最常用用法總結的相關資料,需要的朋友可以參考下2025-12-12
線程池之newCachedThreadPool可緩存線程池的實例
這篇文章主要介紹了線程池之newCachedThreadPool可緩存線程池的實例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06

