怎么在Java中對(duì)List進(jìn)行初始化?針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。
企業(yè)建站必須是能夠以充分展現(xiàn)企業(yè)形象為主要目的,是企業(yè)文化與產(chǎn)品對(duì)外擴(kuò)展宣傳的重要窗口,一個(gè)合格的網(wǎng)站不僅僅能為公司帶來(lái)巨大的互聯(lián)網(wǎng)上的收集和信息發(fā)布平臺(tái),創(chuàng)新互聯(lián)公司面向各種領(lǐng)域:集裝箱等成都網(wǎng)站設(shè)計(jì)、成都全網(wǎng)營(yíng)銷(xiāo)解決方案、網(wǎng)站設(shè)計(jì)等建站排名服務(wù)。
List是java重要的數(shù)據(jù)結(jié)構(gòu)之一,我們經(jīng)常接觸到的有ArrayList、Vector和LinkedList三種,他們都繼承來(lái)自java.util.Collection接口,類(lèi)圖如下
1.構(gòu)造 List 后使用 List.add 初始化
這是最常規(guī)的做法,用起來(lái)不太方便。
2.使用 {{}} 雙括號(hào)語(yǔ)法
這種方式相對(duì)方便了一些。
外層的{}定義了一個(gè) LinkedList 的匿名內(nèi)部類(lèi)。內(nèi)層的{}的定義了一個(gè)實(shí)例初始化代碼塊。 這個(gè)代碼塊在初始化內(nèi)部類(lèi)時(shí)執(zhí)行。所以這里相當(dāng)于定義了一個(gè)匿名內(nèi)部類(lèi),并使用add添加元素來(lái)初始化。
這種方式有幾個(gè)缺點(diǎn):
使用匿名內(nèi)部類(lèi),會(huì)有效率上的損失。當(dāng)然在大多數(shù)情況下,這點(diǎn)效率都是可接受的。
靜態(tài)內(nèi)部類(lèi)持有所在外部類(lèi)的引用。如果需要將 List 返回給到其他地方使用,可能造成內(nèi)存泄漏。
3.使用 Arrays.asList
這種方式使用了 java.util.Arrays 的靜態(tài)方法。寫(xiě)法上比之前的兩種都更簡(jiǎn)潔,也沒(méi)有構(gòu)造匿名內(nèi)部類(lèi)的效率問(wèn)題。
但也有幾點(diǎn)需要注意:
Arrays.asList 返回的是 Arrays 的靜態(tài)內(nèi)部類(lèi)(靜態(tài)內(nèi)部類(lèi)不持有所在外部類(lèi)的引用)。
這個(gè)內(nèi)部類(lè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ù)如果是基本類(lèi)型的數(shù)組時(shí),需要留意返回值可能和你預(yù)期的不同。
這里Arrays.asList(intArray)的返回值是List
雖然本文是在講初始化List,但這里的{{}}雙括號(hào)語(yǔ)法同樣可用于初始化Map等其他眾多類(lèi)型。相對(duì)而言,Arrays.asList就只能用于初始化List類(lèi)型了。
4. 使用 Stream (JDK8)
使用了 JDK8 的 Stream 來(lái)初始化。 單純初始化 List,使用 Stream 有點(diǎn)大材小用了。
5. 使用 Lists (JDK9)
關(guān)于怎么在Java中對(duì)List進(jìn)行初始化問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。