Collections.emptyList() vs. new instance

2022-08-31 05:23:08

在实践中,返回如下空列表是否更好:

return Collections.emptyList();

或者像这样

return new ArrayList<Foo>();

或者这完全取决于您将如何处理返回的列表?


答案 1

主要区别在于 Collections.emptyList() 返回一个不可变的列表,即一个无法添加元素的列表。(这同样适用于 Java 9 中引入的 List.of()。

在极少数情况下,您确实想要修改返回的列表,因此不是一个好的选择。Collections.emptyList()List.of()

我想说的是,只要契约(文档)没有明确说明不同,返回一个不可变的列表是完全可以的(甚至是首选的方式)。


此外,可能不会在每次调用时创建新对象。emptyList()

此方法的实现不需要为每个调用创建单独的 List 对象。使用此方法的成本可能与使用同名字段相当。(与此方法不同,该字段不提供类型安全性。

实现方式如下:emptyList

public static final <T> List<T> emptyList() {
    return (List<T>) EMPTY_LIST;
}

因此,如果您的方法(返回空列表)经常被调用,则此方法甚至可以在CPU和内存方面为您提供稍微更好的性能。


答案 2

从 Java 5.0 开始,您可以在容器中指定元素的类型:

Collections.<Foo>emptyList()

我同意其他回答,即对于要返回保持为空的空列表的情况,应使用此方法。