List的初始化方式

在LinkedIn考试考到了,很遗憾没考过,特意记录一下,下次再战!
文章不是我写的,看到别人的总结,发在我这里自己看看

在 Java 中几种初始化 List 的方法:

1. 

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

  这种方式简单粗暴好理解,比较花费代码行数,而且是各个JDK都支持的通用做法

2. 

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

  这里定义了一个匿名的内部类,并使用 add 来初始化,虽然可以写为一行(这里并不是很重要),匿名内部类有一些效率损失,其次,如果需要把类返回给外部使用,可能产生内存泄漏。

3.

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

  这里使用了 asList 的静态方法,2中提到的两个风险都能避免,但同2一样,不支持删减,这点要注意。

      另外:

  • 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>, 尽量使用包装类,避免使用底层数据结构。PS, {{}} 双括号语法同样可用于初始化 Map 等其他众多类型

4.

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

  这是 JDK8以后支持的方式,流式初始化,可以用流式处理的方法有很多,这里有点大材小用。

5.

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

  这是 JDK9的初始化方式

原文地址:https://www.cnblogs.com/spillage/p/15185398.html