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
?
答案 0 :(得分:7)
都不是。根据{{3}}的文档,它返回:
返回一个包含任意数量元素的不可变列表。
请注意,ArrayList
和LinkedList
实现的是接口 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/