List 是 Java 開發(fā)中經(jīng)常會使用的集合知市,你們知道有哪些方式可以初始化一個 List 嗎擅耽?這其中不缺乏一些坑活孩,今天棧長我給大家一一普及一下。
1乖仇、常規(guī)方式
List languages = new ArrayList<>();
languages.add("Java");
languages.add("PHP");
languages.add("Python");
System.out.println(languages);
這種就是我們平常用的最多最平常的方式了憾儒,沒什么好說的,后面缺失的泛型類型在 JDK 7 之后就可以不用寫具體的類型了乃沙,改進(jìn)后會自動推斷類型起趾。
2、Arrays 工具類
List jdks = asList("JDK6", "JDK8", "JDK10");
System.out.println(jdks);
注意警儒,上面的 asList 是 Arrays 的靜態(tài)方法训裆,這里使用了靜態(tài)導(dǎo)入。這種方式添加的是不可變的 List, 即不能添加蜀铲、刪除等操作边琉,需要警惕。蝙茶。
import static java.util.Arrays.asList;
如果要可變艺骂,那就使用 ArrayList 再包裝一下,如下面所示隆夯。
List numbers = new ArrayList<>(Arrays.asList("1", "2", "3"));
numbers.add("4");
System.out.println(numbers);
包裝一下钳恕,這就是可變的 ArrayList 了。
3蹄衷、Collections 工具類
List apples = Collections.nCopies(3, "apple");
System.out.println(apples);
這種方式添加的是不可變的忧额、復(fù)制某個元素N遍的工具類,以上程序輸出:
[apple, apple, apple]
老規(guī)則愧口,如果要可變睦番,使用 ArrayList 包裝一遍。
List dogs = new ArrayList<>(Collections.nCopies(3, "dog"));
dogs.add("dog");
System.out.println(dogs);
還有初始化單個對象的 List 工具類,這種方式也是不可變的托嚣,集合內(nèi)只能有一個元素巩检,這種也用得很少啊。
List cat = Collections.singletonList("cat");
System.out.println(cat);
還有一個創(chuàng)建空 List 的工具類示启,沒有默認(rèn)容量兢哭,節(jié)省空間,但不知道實(shí)際工作中有什么鳥用夫嗓。
List cat = Collections.emptyList("cat");
4迟螺、匿名內(nèi)部類
List names = new ArrayList<>() {{
add("Tom");
add("Sally");
add("John");
}};
System.out.println(names);
這種使用了匿名內(nèi)部類的方式,一氣喝成舍咖,是不是很高大上矩父?棧長我曾經(jīng)也使用過這種方式,不過我覺得這種看似高級排霉,實(shí)現(xiàn)也沒什么卵用窍株。
5、JDK8 Stream
List colors = Stream.of("blue", "red", "yellow").collect(toList());
System.out.println(colors);
Stream 是 JDK 8 推出來的新概念郑诺,比集合還要更強(qiáng)大夹姥,還可以和集合互相轉(zhuǎn)換杉武。
上面同樣使用了靜態(tài)導(dǎo)入:
import static java.util.stream.Collectors.toList;
關(guān)于 Stream 的一系列教程辙诞,可以在Java技術(shù)棧微信公眾號后臺回復(fù)關(guān)鍵字:新特性。
6轻抱、JDK 9 List.of
List cups = List.of("A", "B", "C");
System.out.println(cups);
這是 JDK 9 里面新增的 List 接口里面的靜態(tài)方法飞涂,同樣也是不可變的。
在接口中實(shí)現(xiàn)靜態(tài)方法和默認(rèn)方法是 JDK 8 中添加的新特性祈搜,具體看這篇文章《JDK 8 新特性之接口默認(rèn)方法與靜態(tài)方法 》较店。更多 JDK 新特性,可以在Java技術(shù)棧微信公眾號后臺回復(fù)關(guān)鍵字:新特性容燕。
好了梁呈,今天棧長就給大家介紹到這里了,這 6 種蘸秘,你知道幾種官卡?另外,Map, Set 也有類似的初始化的方法醋虏,大家有興趣的可以試一下