何时返回空集合,什么时候不返?

时间:2014-01-16 08:39:25

标签: java collections

这个问题涉及函数public List inorderTraversal ()

假设root为null,返回的List为空,即size = 0.我现在很困惑,因为它与Collections.emptyList()相同。我们什么时候应该使用Collections.emptyList?这个inorderTraversal是否适合使用它而不是大小为0的列表?

6 个答案:

答案 0 :(得分:1)

public static void main(String[] args) {
    List l = Collections.emptyList();
    l.clear();     // No NPE
    List p = null;
    p.clear();     // NPE
}

所以,更喜欢返回emptyList而不是返回null ..

答案 1 :(得分:1)

Collections.emptyList是一个非常有用的方法来存储对空列表的引用(我猜这很明显)。

使用它的好处是它只会占用单个列表所需的内存。使用它可以节省您在使用多个空列表时使用的内存。此外,因为它是静态的,所以这个List实例将始终存在,无论你使用它一次,一千次还是一次都不存在。

当您希望返回不包含任何对象的“静态”列表时,应该使用它。我在这里使用术语“静态”来表示该列表是空的,并且不会以任何方式填充。例如,如果您有一个数据访问对象并执行不产生任何对象的数据库检索,那么您的访问者应返回Collections#emptyList

但是,如果你有一个动态使用的列表(并且作为其中的一部分变为空),例如支持像你自己的List实现这样的数据结构,那么你不应该使用它,因为你需要保持对活动列表的引用。

此外,如果(您应该)返回内部数组的防御性副本,那么当内部列表为空时,您将能够使用Collections#emptyList

答案 2 :(得分:0)

只要有意义,我会返回一个空集合。如果您需要区分空集合和“未初始化”或某些null状态,则可以返回null。

答案 3 :(得分:0)

您可以在return之前检查结果列表的大小。如果大小为0,则可以返回Collections.emptyList(),这样您的空ArrayList将变为孤立,并将被垃圾回收。

空列表IMO优先于null,因为它们会阻止NullPointerException

答案 4 :(得分:0)

简单地说:是的。这样,如果rootnull,您可以避免创建ArrayList(并且不必要地占用内存)。

虽然这不是你所要求的,但通常返回空集合优先于返回null - 它会阻止许多NPE。

答案 5 :(得分:0)

请注意Collections.emptyList()会返回不可变列表,这意味着添加或删除它会失败。

http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#emptyList()