根据 Effective Java 返回空集合

Returning empty collections in accordance with Effective Java

Effective Java,项目 43 状态:

return unmodifiable empty collections instead of null.

到目前为止一切顺利。 return 是否有任何指导方针?这个问题甚至有意义吗?我在想的是:

性能差异?几乎没有。

内存占用?也许。

CPU足迹?也许。

是否应该全局声明这些静态 return(即缓存)?

Collectionsclass 已经为您缓存了它们,其中包含一些实用方法。

您可以使用 Collections.emptySet()Collections.emptyMap()Collections.emptyList() return 不可变空集合。只要您在代码中使用 SetMapList 接口,您就应该这样做。

还有一些方法可以 returning(同样是不可变的)包含单个实例的集合,例如 Collections.singletonList(mySingleElement).

它们并没有真正影响性能,但它们确实使您的代码更清晰:

return Collections.unmodifiableList(new ArrayList<>());

对比

return Collections.emptyList();

您还可以找到 Collections.EMPTY_LIST 等,但是在使用这些方法时,您可以避免因(缺少)泛型而收到警告。

你唯一关心的是:确保返回的集合是不可变的

当您使用集合 class 中的各种 emptyXyz() 方法时,您会得到它。从这个意义上说:只要确保你总是使用这些方法;不要浪费时间考虑替代方案。

如:除非您在短时间内进行了数百万次调用,否则不要开始担心性能。编写简单、干净、可读的代码更为重要。因为当你这样做时,你(通常)也有不显着的代码 "slow".

意思是:当然,应该避免完全愚蠢的表现错误。但是,当涵盖该部分时 - 不要 假设 您应该担心性能。当 客户 抱怨时,性能就会成为一个问题。然后你 profile 你的代码在做什么,找出真正的麻烦制造者。如果您随后发现 emptyList() 是一件比其他任何东西都更昂贵并且让您付出太多代价的东西 - 然后回来写一个关于它的问题。 (这可能永远不会发生)