在LinkedIn考試考到了,很遺憾沒考過,特意記錄一下,下次再戰(zhàn)!
文章不是我寫的,看到別人的總結(jié),發(fā)在我這里自己看看
在 Java 中幾種初始化 List 的方法:
1.
List<String> stringList = new LinkedList<>();
stringList.add("a");
stringList.add("b");
stringList.add("c");
這種方式簡(jiǎn)單粗暴好理解,比較花費(fèi)代碼行數(shù),而且是各個(gè)JDK都支持的通用做法
2.
List<String> stringList = new LinkedList<String>(){{
add("a");
add("b");
add("c");
}};
這里定義了一個(gè)匿名的內(nèi)部類,并使用 add 來初始化,雖然可以寫為一行(這里并不是很重要),匿名內(nèi)部類有一些效率損失,其次,如果需要把類返回給外部使用,可能產(chǎn)生內(nèi)存泄漏。
3.
List<String> stringList = Arrays.asList("a", "b", "c");
這里使用了 asList 的靜態(tài)方法,2中提到的兩個(gè)風(fēng)險(xiǎn)都能避免,但同2一樣,不支持刪減,這點(diǎn)要注意。
另外:
- Arrays.asList 的參數(shù)如果是基本類型的數(shù)組時(shí),需要留意返回值可能和你預(yù)期的不同。
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>, 盡量使用包裝類,避免使用底層數(shù)據(jù)結(jié)構(gòu)。PS, {{}} 雙括號(hào)語法同樣可用于初始化 Map 等其他眾多類型
4.
List<String> list = Stream.of("a", "b", "c").collect(Collectors.toList());
這是 JDK8以后支持的方式,流式初始化,可以用流式處理的方法有很多,這里有點(diǎn)大材小用。
5.
List<String> list = Lists.newArrayList("a", "b", "c");
這是 JDK9的初始化方式
浙公網(wǎng)安備 33010602011771號(hào)