根据Effective Java返回空集合

D. *_*ács 2 java collections effective-java

Effective Java,第43项规定:

返回不可修改的空集合而不是null.

到现在为止还挺好.有什么指导方针,到底要返回什么?这个问题甚至有意义吗?我在想的是:

  • 是否返回emtpy LinkedList<>或是否有所不同ArrayList<>(0)
  • 是否返回空HashMap<>或者是否有所不同TreeMap<>
  • 等等

性能差异?几乎不.

内存占用?也许.

CPU占用空间?也许.

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

Kay*_*man 11

它们已经由Collections类缓存,其中包含一些实用方法.

您可以使用Collections.emptySet(),Collections.emptyMap()Collections.emptyList()返回不可变的空集合.正如只要你使用Set,MapList在你的代码接口,你应该.

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

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

return Collections.unmodifiableList(new ArrayList<>());
Run Code Online (Sandbox Code Playgroud)

return Collections.emptyList();
Run Code Online (Sandbox Code Playgroud)

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