Java數(shù)組轉(zhuǎn)換為L(zhǎng)ist的四種方式
第一種 Arrays.asList
即 Java.util 提供的 Arrays 中的 asList 方法,可以直接將一般的字符串?dāng)?shù)組以及包裝類(lèi)后的結(jié)果做直接轉(zhuǎn)換。
需要注意的是 :通過(guò)這種方式得到的List 不能執(zhí)行增刪操作,否則會(huì)拋出java.lang.UnsupportedOperationException 異常,即不支持操作的異常,一般的獲取get, size等可以照常使用原
因 : Arrays.asList(str)返回值是java.util.Arrays類(lèi)中一個(gè)私有靜態(tài)內(nèi)部類(lèi) java.utiil.Arrays.Arraylist,不是我們平時(shí)用的java.util.ArrayList();
適用于 只轉(zhuǎn)換后作為讀取的目標(biāo),不能用于增刪操作
示例代碼如下:
// 引用類(lèi)型 Integer[] cardNumberArray = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; String[] strings = {"dd", "aa", "545", "ee"}; // 基本類(lèi)型 int[] cardNumberArrayInt = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; // 元素轉(zhuǎn)換成功 List<Integer> integers = Arrays.asList(cardNumberArray); List<String> list = Arrays.asList(strings); // 出現(xiàn)了基本類(lèi)型 List<int[]> ints = Arrays.asList(cardNumberArrayInt); // 執(zhí)行了添加操作 結(jié)果出錯(cuò) integers.add(15);
同時(shí)可以看的出 上面如果直接使用了 int[] 這種基本類(lèi)型, 轉(zhuǎn)換時(shí)并不是我們預(yù)期的 int 而且把 int[] 認(rèn)為了是一個(gè)泛型中的基本類(lèi)型,泛型中不支持基本數(shù)據(jù)類(lèi)型,所以如果非要使用盡量轉(zhuǎn)為包裝類(lèi),除非只做基本的運(yùn)算。
asList 返回的是一個(gè)視圖,簡(jiǎn)單來(lái)說(shuō)只能看和讀取,不能執(zhí)行其他操作
總的來(lái)說(shuō)這種方式泛用性不是很強(qiáng)
第二種 ArrayList 構(gòu)造方法
將第一種 Arrays.asList 的返回值作為 arrayList 夠構(gòu)造方法的入?yún)ⅲ纯蓸?gòu)造出可以進(jìn)行增刪操的正常 list代碼如下:
// 引用類(lèi)型 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));
適用于 數(shù)組轉(zhuǎn)為需要執(zhí)行增刪等正常操作的 list,同時(shí)數(shù)據(jù)量不是太大
第三種 Collections.addAll
通過(guò) Collections.addAll(要賦值的list, 原有l(wèi)ist);
同樣是 JDK 自帶的 Collections, 先創(chuàng)建一個(gè)對(duì)應(yīng)的 list 并賦予原有數(shù)組長(zhǎng)度,然后給與賦值Collections.addAll() 會(huì)將數(shù)組中的元素轉(zhuǎn)為二進(jìn)制,然后添加到List中。這種方法 效率相對(duì)較高
示例代碼如下:
// 引用類(lèi)型 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 支持的 基本類(lèi)型轉(zhuǎn)換 int[],long[],double[]
不支持的 short[ ],byte[ ],char[]
示例代碼如下:
// 基本類(lèi)型 int[] cardNumberArrayInt = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; List<Integer> collect1 = Arrays.stream(cardNumberArrayInt).boxed().collect(Collectors.toList());
其他支持的 long[] 以及 double[] 與上面類(lèi)似
同樣的引用類(lèi)型也可以使用這種方式:
Integer[] cardNumberArray = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; List<Integer> collect = Arrays.stream(cardNumberArray).collect(Collectors.toList());
引用類(lèi)型與基礎(chǔ)類(lèi)型相比 少了 boxed 這一過(guò)程,是一個(gè)轉(zhuǎn)包裝類(lèi)的過(guò)程。對(duì)于Stream 不太熟悉的可以參考我的另一篇對(duì) Stream 使用的描述
Java Stream map, Collectors(toMap, toList, toSet, groupingBy, collectingAndThen)等學(xué)習(xí)和使用理解及案例
到此這篇關(guān)于Java開(kāi)發(fā)技巧 數(shù)組轉(zhuǎn)List的四種方式總結(jié)的文章就介紹到這了,更多相關(guān)java數(shù)組轉(zhuǎn)list內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
一文掌握spring cloud gateway(總結(jié)篇)
Spring Cloud Gateway是Spring Cloud的全新項(xiàng)目,該項(xiàng)目是基于Spring 5.0,Spring WebFlux和Project Reactor等技術(shù)開(kāi)發(fā)的網(wǎng)關(guān),它旨在為微服務(wù)架構(gòu)提供一種簡(jiǎn)單有效的統(tǒng)一的API路由管理方式,本文通過(guò)實(shí)例代碼總結(jié)介紹spring cloud gateway的相關(guān)知識(shí),感興趣的朋友一起看看吧2024-12-12SpringBoot在項(xiàng)目停止(服務(wù)停止/關(guān)閉退出)之后執(zhí)行的方法
這篇文章主要給大家介紹了SpringBoot在項(xiàng)目停止(服務(wù)停止/關(guān)閉退出)之后執(zhí)行的兩種方法,實(shí)現(xiàn)DisposableBean接口和使用@PreDestroy注解,文中有詳細(xì)的代碼講解,具有一定的參考價(jià)值,需要的朋友可以參考下2023-12-12spring+maven實(shí)現(xiàn)郵件發(fā)送
這篇文章主要為大家詳細(xì)介紹了spring+maven實(shí)現(xiàn)郵件發(fā)送,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07SpringBoot feign動(dòng)態(tài)設(shè)置數(shù)據(jù)源(https請(qǐng)求)
這篇文章主要介紹了SpringBoot如何在運(yùn)行時(shí)feign動(dòng)態(tài)添加數(shù)據(jù)源,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2021-08-08Java 實(shí)現(xiàn)萬(wàn)年歷總結(jié)
這篇文章主要介紹了Java 萬(wàn)年歷實(shí)現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下2016-09-09Springboot實(shí)現(xiàn)自定義錯(cuò)誤頁(yè)面的方法(錯(cuò)誤處理機(jī)制)
這篇文章主要介紹了Springboot實(shí)現(xiàn)自定義錯(cuò)誤頁(yè)面的方法(錯(cuò)誤處理機(jī)制),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01SpringBoot枚舉類(lèi)型參數(shù)認(rèn)證的實(shí)現(xiàn)代碼
項(xiàng)目當(dāng)中經(jīng)常需要接口參數(shù)是否在一個(gè)可選的范圍內(nèi),也就是驗(yàn)證類(lèi)枚舉參數(shù)的需求,所以本文我們將使用SpringBoot實(shí)現(xiàn)枚舉類(lèi)型參數(shù)認(rèn)證,文中有詳細(xì)的代碼示例,需要的朋友可以參考下2023-12-12