Java中的List.of()生成哪种类型的列表

时间:2018-10-29 18:25:35

标签: java list collections

Employee john = new Employee("John", "Brown", 32, 100);
Employee camila = new Employee("Camila", "Smith", 25, 101);
Employee pat = new Employee("Pat", "Hanson", 23, 102);

List<Employee> employeeList = List.of(john, camila, pat);

List方法生成什么类型​​的List.of()。是ArrayList还是LinkedList

4 个答案:

答案 0 :(得分:7)

都不是。根据{{​​3}}的文档,它返回:

  

返回一个包含任意数量元素的不可变列表。

请注意,ArrayListLinkedList实现的是接口 List.of()

如果我们运行以下代码:

List<Integer> listOf = List.of(1,2,3);
System.out.println(listOf.getClass());

我们得到:

class java.util.ImmutableCollections$ListN

答案 1 :(得分:2)

您可以查看不同的List#of methods in the OpenJDK source code

(该模式显然是受到相应的Guava类的启发。请参见Why does Guava's ImmutableList have so many overloaded of() methods?

不是专用于一定数量参数的方法将创建一个ImmutableCollections.ListN实例,该实例在内部仅存储varargs-array的副本(!),并提供了简单的实现List方法中的任何一种来访问数组。

但是正如其他人指出的那样:确切的类型应该无关紧要!

唯一重要的一点是,返回的列表也实现了RandomAccess。尽管documentation for unmodifiable lists中似乎没有明确指定,但这是我个人所依赖的。他们永远不会将其更改为某种形式的链表...

答案 2 :(得分:1)

List<Employee> employeeList = List.of(john, camila, pat);

或多或少等于

List<Employee> employeeList = Collections.unmodifiableList(Arrays.asList(john, camila, pat));

如果您担心List的具体实现,请自己动手做,这样做会更好。

答案 3 :(得分:0)

List.of() 作为静态工厂方法返回 List 的基本不可变实现。

访问https://4comprehension.com/the-curious-case-of-jdk9-immutable-collections/