Java - List集合與Array數組的相互轉換

一、List 轉 Array

使用集合轉數組的方法,必須使用集合的 toArray(T[] array),傳入的是類型完全一樣的數組,大小就是 list.size()

public static void main(String[] args) throws Exception {List<String> list = new ArrayList<String>();list.add("A");list.add("B");list.add("C");// 使用泛型,無需顯式類型轉換String[] array = list.toArray(new String[list.size()]);for (int i = 0; i < array.length; i++) {System.out.println(array[i]);}}

注意:直接使用 toArray 無參方法存在問題,此方法返回值只能是 Object[] 類,若強轉其它類型數組將出現 ClassCastException 錯誤!!!

如下代碼會報異常:

異常:

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;

二、Array 轉 List

使用工具類 Arrays.asList() 把數組轉換成集合時,不能使用其修改集合相關的方法,它的 add/remove/clear 方法會拋出 UnsupportedOperationException 異常。

說明:asList 的返回對象是一個 Arrays 內部類,并沒有實現集合的修改方法。Arrays.asList體現的是適配器模式,只是轉換接口,后臺的數據仍是數組。

String[] str = new String[] { "a", "b" };
List list = Arrays.asList(str);
list.forEach(System.out::println);

第一種情況:list.add("c"); 運行時異常

Exception in thread "main" java.lang.UnsupportedOperationExceptionat java.util.AbstractList.add(AbstractList.java:148)at java.util.AbstractList.add(AbstractList.java:108)

第二種情況:str[0]= "d"; 那么 list.get(0) 也會隨之修改

說明:

@SafeVarargs
@SuppressWarnings("varargs")
public static <T> List<T> asList(T... a) {return new ArrayList<>(a);
}

這個 ArrayList 并不是? java.util 中的 ArrayList,而是一個內部的 ArrayList,不提供 add 等修改操作

private static class ArrayList<E> extends AbstractList<E>implements RandomAccess, java.io.Serializable
{private static final long serialVersionUID = -2764017481108945198L;private final E[] a;

解決方案:

1、運用ArrayList的構造方法是目前來說最完美的作法,代碼簡潔,效率高:

List<String> list = new ArrayList<String> (Arrays.asList(array));
List<String> list = new ArrayList<String>(Arrays.asList(array));** //ArrayList構造方法源碼
public ArrayList(Collection<? extends E> c) {elementData = c.toArray();size = elementData.length; // c.toArray might (incorrectly) not return Object[] (see 6260652)if (elementData.getClass() != Object\[\].class)elementData = Arrays.copyOf(elementData, size, Object[].class);
}

2、運用Collections的addAll方法也也是不錯的解決辦法

List<String> list = new ArrayList<String>(array.length);
Collections.addAll(list, array);

Array or List 分隔

其實自己實現一個分隔list或者數組的方法也并不復雜,但強大的第三方庫自然提供的有此類似的功能

// org.apache.commons.lang3.StringUtils.join(Iterable<?>, String)
StringUtils.join(list, ",") // org.apache.commons.lang3.StringUtils.join(Object[], String)
StringUtils.join(array, ",")

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/717735.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/717735.shtml
英文地址,請注明出處:http://en.pswp.cn/news/717735.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

無處不在的智慧:探索嵌入式系統的奇妙

無處不在的智慧&#xff1a;探索嵌入式系統的奇妙 嵌入式系統作為當今科技領域中無處不在的一種技術&#xff0c;其奇妙之處正在逐步被揭示和探索。從智能家居到智能穿戴設備&#xff0c;從工業自動化到醫療健康&#xff0c;嵌入式系統已經深入到我們生活和工作的方方面面&…

分布式ID生成策略-雪花算法Snowflake

分布式ID生成策略-雪花算法Snowflake 一、其他分布式ID策略1.UUID2.數據庫自增與優化2.1 優化1 - 共用id自增表2.2 優化2 - 分段獲取id 3.Reids的incr和incrby 二、雪花算法Snowflake1.雪花算法的定義2.基礎雪花算法源碼解讀3.并發1000測試4.如何設置機房和機器id4.雪花算法時鐘…

【misc | CTF】BUUCTF 二維碼

天命&#xff1a;這題使用到腳本暴力破解壓縮包文件里面的密碼&#xff0c;還是比較有意思的 一開始是一個二維碼&#xff0c;掃碼進去有一個假flag 扔進圖片隱寫工具&#xff0c;啥也沒有&#xff0c;都是同一個二維碼 使用工具&#xff1a;foremost&#xff0c;直接分離圖片&…

【詳識JAVA語言】抽象類和接口

抽象類 抽象類概念 在面向對象的概念中&#xff0c;所有的對象都是通過類來描繪的&#xff0c;但是反過來&#xff0c;并不是所有的類都是用來描繪對象的&#xff0c;如果 一個類中沒有包含足夠的信息來描繪一個具體的對象&#xff0c;這樣的類就是抽象類。 比如&#xff1a;…

水印相機小程序源碼

水印相機前端源碼&#xff0c;本程序無需后端&#xff0c;前端直接導入即可&#xff0c;沒有添加流量主功能&#xff0c;大家開通后自行添加 源碼搜索&#xff1a;源碼軟件庫 注意小程序后臺的隱私權限設置&#xff0c;前端需要授權才可使用 真實時間地址拍照記錄&#xff0c…

Endnote x9 最快方法批量導入.enw格式文件

按照網上看到的一個方法直接選中所有enw批量拖拽到 All references 附件不行啊&#xff0c; 以為只能寫bat腳本方式了 經過一番嘗試&#xff0c;驚人的發現拖到下面這個符號的地方就行了&#xff01;&#xff01;&#xff01; 如果不成功的話&#xff0c;可能&#xff1a; 我…

使用typescript實現引入vue3生命周期函數的基礎知識整理

在Vue 3中&#xff0c;生命周期函數被更改為組合式API&#xff0c;并且不再使用官方命名的生命周期鉤子函數。不過&#xff0c;我們仍然可以模擬類似的功能&#xff0c;使用onBeforeMount、onMounted、onBeforeUpdate、onUpdated、onBeforeUnmount、onUnmounted等組合式API。 …

淺談vue的自定義指令

Vue 的自定義指令是一種強大的工具&#xff0c;允許你為 DOM 元素添加自定義行為。自定義指令可以通過 Vue 的 Vue.directive() 全局 API 或組件內的 directives 選項來定義。 下面是如何使用 Vue 的自定義指令的基本步驟&#xff1a; 全局注冊自定義指令 Vue.directive(foc…

js 手寫深拷貝方法

文章目錄 一、深拷貝實現代碼二、代碼講解2.1 obj.constructor(obj)2.2 防止循環引用手寫一個深拷貝是我們常見的面試題,在實現過程中我們需要考慮的類型很多,包括對象、數組、函數、日期等。以下就是深拷貝實現邏輯 一、深拷貝實現代碼 const originalObject = {string: H…

藍橋杯復習之差分

題目&#xff1a;空調 題目鏈接&#xff1a;https://www.acwing.com/problem/content/description/4265/ 思路&#xff1a; 對希望溫度與實際溫度做差&#xff0c;再對這個做差數組做差分。我們的每次操作等價于在差分數組中選一個數加一或者選兩個數一個加一&#xff0c…

【小沐學GIS】QGIS安裝和入門使用

文章目錄 1、簡介2、下載和安裝3、使用3.1 XYZ Tiles3.2 WMS / WMTS3.3 GeoJson文件加載 4、在線資源結語 1、簡介 QGIS是一款開源地理信息系統。該項目于2002年5月誕生&#xff0c;同年6月作為SourceForge上的一個項目建立。QGIS目前運行在大多數Unix平臺、Windows和macOS上。…

奧爾特曼被曝身價超過140億,但并未在OpenAI持股

作為OpenAI CEO和新一輪AI熱潮代表人物&#xff0c;奧爾特曼&#xff08;Sam Altman&#xff09;卻沒有在OpenAI公司賺到“身價”。 鈦媒體AGI 3月3日消息&#xff0c;據彭博億萬富翁指數最新數據顯示&#xff0c;今年38歲的奧爾特曼最新身價&#xff08;凈收入&#xff09;至少…

什么是區塊鏈粉塵攻擊?

文章目錄 一、什么是粉塵&#xff1f;二、什么是粉塵攻擊&#xff1f;三、粉塵攻擊的危害3.1 釣魚式攻擊3.2 揭露該錢包和其所有者的詳細信息3.3 造成鏈上網絡擁堵 四、可能使用粉塵交易的人群五、如何避免粉塵攻擊&#xff1f; 一、什么是粉塵&#xff1f; 粉塵的含義為小額資…

無窮積分例子

以下幾個題容易出錯&#xff0c;特意記錄一下。 判斷積分式的斂散性 ∫ ? ∞ ∞ 1 x 2 e 1 x d x \int _{-\infty } ^ {\infty} \frac{1}{x^2} e ^{\frac{1}{x}} dx ∫?∞∞?x21?ex1?dx 要注意瑕點0的處理。無窮積分&#xff0c;一般將積分域按瑕點拆分并分別積分。 判斷…

阿里面試,有點焦慮。。

恭喜發現寶藏&#xff01;搜索公眾號【TechGuide】回復公司名&#xff0c;解鎖更多新鮮好文和互聯網大廠的筆經面經&#xff0c;目前已更新至美團、字節… 作者TechGuide【全網同名】 聊聊春招 春招來了&#xff0c;有些24屆校招生可能還在做最后的努力&#xff0c;有些25屆的…

國辰智企MES系統優化企業管理,讓生產制造更高效

在制造業的舞臺上&#xff0c;MES制造執行管理系統如同一位出色的導演&#xff0c;將生產過程中的各個場景巧妙地連接起來&#xff0c;演繹出一場場精彩的制造盛宴。讓我們一同走進MES在制造業的具體應用場景&#xff0c;感受它帶來的變革與創新。 在生產計劃與調度的場景中&am…

[數據結構]棧

1.棧的概念及結構 棧&#xff1a;一種特殊的線性表&#xff0c;其只允許在固定的一端進行插入和刪除元素操作。進行數據插入和刪除操作的一端稱為棧頂&#xff0c;另一端稱為棧底。棧中的數據元素遵守后進先出的原則。 壓棧&#xff1a;棧的插入操作叫做進棧/壓棧/入棧&#…

[ai筆記14] 周鴻祎的ai公開課筆記1

歡迎來到文思源想的ai空間&#xff0c;這是技術老兵重學ai以及成長思考的第14篇分享&#xff01; 本周二月的最后一周&#xff0c;并不是閑下來了&#xff0c;反而是開始進行一些更多的深入實踐&#xff0c;關于gpt的主體架構、關于prompt&#xff0c;同時也看了不少書和直播&…

行業獨角獸—Matic Network來臨,成就百萬富翁的項目!

Matic Network由印度Bangalore及日本超級節點打造 &#xff0c;獨創保險倉九倉共振循環模式。 Mtc于2023年初完成了700萬美元的種子輪融資&#xff0c; Paradigm領投&#xff0c;a16z、Variant、Solana Ventures和Jump Crypto參投&#xff0c;旨在全方位布局Web3.0的去中心化生…

web開發:如何用Echarts來自動給網頁設計各種統計圖

很多時候web開發也會需要用到統計圖&#xff0c;如果單純靠我們自己那點拙劣的css和js水平設計的話&#xff0c;又耗時間又做得跟史一樣&#xff0c;這時候就需要引入別人設計師為我們設計好的動態統計圖——echarts Echarts的官網是&#xff1a;Apache ECharts 1、第一步&…