Java 中初始化 List 的五種方法

在 Java 中初始化 List 的五種方法

Java 中經常需要使用到 List,下面簡單介紹幾種常見的初始化方式杨帽。

1.構造 List 后使用 List.add 初始化

List<String> stringList = new LinkedList<>();
stringList.add("a");
stringList.add("b");
stringList.add("c");

這是最常規(guī)的做法剑辫,用起來不太方便撩匕。

2.使用 {{}} 雙括號語法

List<String> stringList = new LinkedList<String>(){{
    add("a");
    add("b");
    add("c");
}};

這種方式相對方便了一些衅枫。

外層的 {} 定義了一個 LinkedList 的匿名內部類。內層的 {} 的定義了一個實例初始化代碼塊。 這個代碼塊在初始化內部類時執(zhí)行。所以這里相當于定義了一個匿名內部類渗钉,并使用 add 添加元素來初始化。

這種方式有幾個缺點:

  • 使用匿名內部類钞钙,會有效率上的損失鳄橘。當然在大多數情況下,這點效率都是可接受的芒炼。
  • 靜態(tài)內部類持有所在外部類的引用瘫怜。如果需要將 List 返回給到其他地方使用,可能造成內存泄漏本刽。

3.使用 Arrays.asList

List<String> stringList = Arrays.asList("a", "b", "c");

這種方式使用了 java.util.Arrays 的靜態(tài)方法鲸湃。寫法上比之前的兩種都更簡潔,也沒有構造匿名內部類的效率問題子寓。

但也有幾點需要注意:

  • Arrays.asList 返回的是 Arrays 的靜態(tài)內部類(靜態(tài)內部類不持有所在外部類的引用)暗挑。

這個內部類繼承自 AbstractList,實現(xiàn)了 RandomAccess斜友,內部使用了一個數組來存儲元素炸裆。但是不支持增刪元素。這點需要注意鲜屏。如果只是使用 Arrays.asList 來初始化常量烹看,那么這點就不算什么問題了。

  • Arrays.asList 的參數如果是基本類型的數組時洛史,需要留意返回值可能和你預期的不同惯殊。
int[] intArray = new int[]{1, 2, 3};
Integer[] integerArray = new Integer[]{1, 2, 3};
 
List<int[] > intArrayList = Arrays.asList(intArray);
List<Integer> integerList = Arrays.asList(integerArray);
List<Integer> integerList2 = Arrays.asList(1, 2, 3);

這里 Arrays.asList(intArray) 的返回值是 List<int[]> 而不是 List<Integer>。這一點也算不上問題也殖,只是使用時需要留意靠胜。如果能在 Java 中做到盡量使用 List 和 Integer,盡量避免使用 int 等基本類型和 [] 這種較為底層的數據結構即可避免毕源。

說點題外話:
Java 終究還是不能稱之為完全面向對象浪漠。畢竟保留了基本數據類型這種東西。誠然基本數據類型使用時比相應的封裝類型效率要更高霎褐。但也給使用過程中帶來了一些困惑:到底該用基本類型址愿,還是封裝類型,什么時候該用這個冻璃,什么時候該用哪個响谓?雖然 Java 提供給了用戶更多的選擇损合,但有種將難題丟給用戶的感覺。在我看來娘纷,Java 相比的 C++ 一個優(yōu)點嫁审,就是很多事情有了限制,有較為明確清晰的定義赖晶,減少了模棱兩可律适,更容易理解。但基本數據類型這里遏插,感覺還是 Java 作為一門改善了 C++ 缺點的語言留下的一些影子捂贿。

雖然本文是在講初始化 List,但這里的 {{}} 雙括號語法同樣可用于初始化 Map 等其他眾多類型胳嘲。相對而言厂僧,Arrays.asList 就只能用于初始化 List 類型了。

4. 使用 Stream (JDK8)

List<String> list = Stream.of("a", "b", "c").collect(Collectors.toList());

使用了 JDK8 的 Stream 來初始化了牛。 單純初始化 List颜屠,使用 Stream 有點大材小用了。

5. 使用 Lists (JDK9)

List<String> list = Lists.newArrayList("a", "b", "c");

這個和 Arrays.asList 一樣簡潔清晰鹰祸。

參考

Double Brace Initialization

How to initialize List<String> object in Java?

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末汽纤,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子福荸,更是在濱河造成了極大的恐慌蕴坪,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件敬锐,死亡現(xiàn)場離奇詭異背传,居然都是意外死亡,警方通過查閱死者的電腦和手機台夺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進店門径玖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人颤介,你說我怎么就攤上這事梳星。” “怎么了滚朵?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵冤灾,是天一觀的道長。 經常有香客問我辕近,道長韵吨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任移宅,我火速辦了婚禮归粉,結果婚禮上椿疗,老公的妹妹穿的比我還像新娘。我一直安慰自己糠悼,他們只是感情好届榄,可當我...
    茶點故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著倔喂,像睡著了一般铝条。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上滴劲,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天,我揣著相機與錄音顾复,去河邊找鬼班挖。 笑死,一個胖子當著我的面吹牛芯砸,可吹牛的內容都是我干的萧芙。 我是一名探鬼主播,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼假丧,長吁一口氣:“原來是場噩夢啊……” “哼双揪!你這毒婦竟也來了?” 一聲冷哼從身側響起包帚,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤渔期,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后渴邦,有當地人在樹林里發(fā)現(xiàn)了一具尸體疯趟,經...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年谋梭,在試婚紗的時候發(fā)現(xiàn)自己被綠了信峻。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,739評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡瓮床,死狀恐怖盹舞,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情隘庄,我是刑警寧澤踢步,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站丑掺,受9級特大地震影響贾虽,放射性物質發(fā)生泄漏。R本人自食惡果不足惜吼鱼,卻給世界環(huán)境...
    茶點故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一蓬豁、第九天 我趴在偏房一處隱蔽的房頂上張望绰咽。 院中可真熱鬧,春花似錦地粪、人聲如沸取募。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽玩敏。三九已至,卻和暖如春质礼,著一層夾襖步出監(jiān)牢的瞬間旺聚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工眶蕉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留砰粹,地道東北人。 一個月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓造挽,卻偏偏與公主長得像碱璃,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子饭入,可洞房花燭夜當晚...
    茶點故事閱讀 44,647評論 2 354

推薦閱讀更多精彩內容

  • 對象的創(chuàng)建與銷毀 Item 1: 使用static工廠方法嵌器,而不是構造函數創(chuàng)建對象:僅僅是創(chuàng)建對象的方法,并非Fa...
    孫小磊閱讀 1,981評論 0 3
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理谐丢,服務發(fā)現(xiàn)爽航,斷路器,智...
    卡卡羅2017閱讀 134,652評論 18 139
  • 最近被網紅震撼了 網紅美女~~ 很慚愧她們的名字我真是叫不出來但對她們的美貌,對她們的氣質饭耳,對她們的能力等等串述,公眾...
    易伊閱讀 256評論 0 0
  • 貓叔說:不去做纲酗,然并卵! 好不容易活一次新蟆,當然要去體驗不一樣的人生觅赊。如果你懶、如果你慫琼稻、如果你拖延吮螺,那么請來行動營...
    凝彩閱讀 436評論 2 2
  • “《傳奇》里的人物都是道地的中國人鸠补,有時候簡直道地得可怕萝风;因此他們都是道地的活人,有時候活得可怕紫岩。他們大多是她同時...
    倚天照海_051b閱讀 1,582評論 0 9