Java中初始化List的5種方法示例
前言
List是java重要的數(shù)據(jù)結(jié)構(gòu)之一,我們經(jīng)常接觸到的有ArrayList、Vector和LinkedList三種,他們都繼承來(lái)自java.util.Collection接口,類圖如下

Java 中經(jīng)常需要使用到 List,下面簡(jiǎn)單介紹幾種常見(jiàn)的初始化方式。
1.構(gòu)造 List 后使用 List.add 初始化

這是最常規(guī)的做法,用起來(lái)不太方便。
2.使用 {{}} 雙括號(hào)語(yǔ)法

這種方式相對(duì)方便了一些。
外層的{}定義了一個(gè) LinkedList 的匿名內(nèi)部類。內(nèi)層的{}的定義了一個(gè)實(shí)例初始化代碼塊。 這個(gè)代碼塊在初始化內(nèi)部類時(shí)執(zhí)行。所以這里相當(dāng)于定義了一個(gè)匿名內(nèi)部類,并使用add添加元素來(lái)初始化。
這種方式有幾個(gè)缺點(diǎn):
使用匿名內(nèi)部類,會(huì)有效率上的損失。當(dāng)然在大多數(shù)情況下,這點(diǎn)效率都是可接受的。
靜態(tài)內(nèi)部類持有所在外部類的引用。如果需要將 List 返回給到其他地方使用,可能造成內(nèi)存泄漏。
3.使用 Arrays.asList

這種方式使用了 java.util.Arrays 的靜態(tài)方法。寫法上比之前的兩種都更簡(jiǎn)潔,也沒(méi)有構(gòu)造匿名內(nèi)部類的效率問(wèn)題。
但也有幾點(diǎn)需要注意:
Arrays.asList 返回的是 Arrays 的靜態(tài)內(nèi)部類(靜態(tài)內(nèi)部類不持有所在外部類的引用)。
這個(gè)內(nèi)部類繼承自 AbstractList,實(shí)現(xiàn)了 RandomAccess,內(nèi)部使用了一個(gè)數(shù)組來(lái)存儲(chǔ)元素。但是不支持增刪元素。這點(diǎn)需要注意。如果只是使用 Arrays.asList 來(lái)初始化常量,那么這點(diǎn)就不算什么問(wèn)題了。
Arrays.asList 的參數(shù)如果是基本類型的數(shù)組時(shí),需要留意返回值可能和你預(yù)期的不同。

這里Arrays.asList(intArray)的返回值是List<int[]>而不是List<Integer>。這一點(diǎn)也算不上問(wèn)題,只是使用時(shí)需要留意。如果能在 Java 中做到盡量使用 List 和 Integer,盡量避免使用 int 等基本類型和[]這種較為底層的數(shù)據(jù)結(jié)構(gòu)即可避免。
雖然本文是在講初始化List,但這里的{{}}雙括號(hào)語(yǔ)法同樣可用于初始化Map等其他眾多類型。相對(duì)而言,Arrays.asList就只能用于初始化List類型了。
4. 使用 Stream (JDK8)

使用了 JDK8 的 Stream 來(lái)初始化。 單純初始化 List,使用 Stream 有點(diǎn)大材小用了。
5. 使用 Lists (JDK9)

這個(gè)和 Arrays.asList 一樣簡(jiǎn)潔清晰。
總結(jié):
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
Spring實(shí)戰(zhàn)之Bean的作用域singleton和prototype用法分析
這篇文章主要介紹了Spring實(shí)戰(zhàn)之Bean的作用域singleton和prototype用法,結(jié)合實(shí)例形式分析了Bean的作用域singleton和prototype相關(guān)使用方法及操作注意事項(xiàng),需要的朋友可以參考下2019-11-11
Spring Boot CORS 配置方法允許跨域請(qǐng)求的最佳實(shí)踐方案
跨域請(qǐng)求在現(xiàn)代Web開(kāi)發(fā)中非常重要,特別是在涉及多個(gè)前端和后端服務(wù)時(shí),本文詳細(xì)介紹了跨域請(qǐng)求的背景、重要性以及如何解決跨域問(wèn)題,通過(guò)SpringBoot框架的CORS配置,可以有效地處理跨域請(qǐng)求,確保數(shù)據(jù)傳輸?shù)陌踩院陀脩趔w驗(yàn),感興趣的朋友跟隨小編一起看看吧2024-11-11
Spring Boot集成MyBatis實(shí)現(xiàn)通用Mapper的配置及使用
關(guān)于MyBatis,大部分人都很熟悉。MyBatis 是一款優(yōu)秀的持久層框架,它支持定制化 SQL、存儲(chǔ)過(guò)程以及高級(jí)映射。這篇文章主要介紹了Spring Boot集成MyBatis實(shí)現(xiàn)通用Mapper,需要的朋友可以參考下2018-08-08
關(guān)于Idea中的.properties文件顯示問(wèn)題
這篇文章主要介紹了關(guān)于Idea中的.properties文件顯示問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07
spring的jdbctemplate的crud的基類dao
本文主要介紹了使用spring的jdbctemplate進(jìn)行增刪改查的基類Dao的簡(jiǎn)單寫法,需要的朋友可以參考下2014-02-02
Java調(diào)用python代碼的五種方式總結(jié)
這篇文章主要給大家介紹了關(guān)于Java調(diào)用python代碼的五種方式,在Java中調(diào)用Python函數(shù)的方法有很多種,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-09-09
JavaWeb response完成重定向?qū)崿F(xiàn)過(guò)程詳解
這篇文章主要介紹了JavaWeb response完成重定向?qū)崿F(xiàn)過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02

