根据 Effective Java 返回空集合
Returning empty collections in accordance with Effective Java
Effective Java
,项目 43 状态:
return unmodifiable empty collections instead of null
.
到目前为止一切顺利。 return 是否有任何指导方针?这个问题甚至有意义吗?我在想的是:
- 你 return 空的
LinkedList<>
还是 ArrayList<>(0)
有区别吗?
- 你 return 空
HashMap<>
还是 TreeMap<>
有区别吗?
- 等等
性能差异?几乎没有。
内存占用?也许。
CPU足迹?也许。
是否应该全局声明这些静态 return(即缓存)?
Collections
class 已经为您缓存了它们,其中包含一些实用方法。
您可以使用 Collections.emptySet()
、Collections.emptyMap()
和 Collections.emptyList()
return 不可变空集合。只要您在代码中使用 Set
、Map
和 List
接口,您就应该这样做。
还有一些方法可以 returning(同样是不可变的)包含单个实例的集合,例如 Collections.singletonList(mySingleElement)
.
它们并没有真正影响性能,但它们确实使您的代码更清晰:
return Collections.unmodifiableList(new ArrayList<>());
对比
return Collections.emptyList();
您还可以找到 Collections.EMPTY_LIST
等,但是在使用这些方法时,您可以避免因(缺少)泛型而收到警告。
你唯一关心的是:确保返回的集合是不可变的。
当您使用集合 class 中的各种 emptyXyz()
方法时,您会得到它。从这个意义上说:只要确保你总是使用这些方法;不要浪费时间考虑替代方案。
如:除非您在短时间内进行了数百万次调用,否则不要开始担心性能。编写简单、干净、可读的代码更为重要。因为当你这样做时,你(通常)也有不显着的代码 "slow".
意思是:当然,应该避免完全愚蠢的表现错误。但是,当涵盖该部分时 - 不要 假设 您应该担心性能。当 客户 抱怨时,性能就会成为一个问题。然后你 profile 你的代码在做什么,找出真正的麻烦制造者。如果您随后发现 emptyList()
是一件比其他任何东西都更昂贵并且让您付出太多代价的东西 - 然后回来写一个关于它的问题。 (这可能永远不会发生)
Effective Java
,项目 43 状态:
return unmodifiable empty collections instead of
null
.
到目前为止一切顺利。 return 是否有任何指导方针?这个问题甚至有意义吗?我在想的是:
- 你 return 空的
LinkedList<>
还是ArrayList<>(0)
有区别吗? - 你 return 空
HashMap<>
还是TreeMap<>
有区别吗? - 等等
性能差异?几乎没有。
内存占用?也许。
CPU足迹?也许。
是否应该全局声明这些静态 return(即缓存)?
Collections
class 已经为您缓存了它们,其中包含一些实用方法。
您可以使用 Collections.emptySet()
、Collections.emptyMap()
和 Collections.emptyList()
return 不可变空集合。只要您在代码中使用 Set
、Map
和 List
接口,您就应该这样做。
还有一些方法可以 returning(同样是不可变的)包含单个实例的集合,例如 Collections.singletonList(mySingleElement)
.
它们并没有真正影响性能,但它们确实使您的代码更清晰:
return Collections.unmodifiableList(new ArrayList<>());
对比
return Collections.emptyList();
您还可以找到 Collections.EMPTY_LIST
等,但是在使用这些方法时,您可以避免因(缺少)泛型而收到警告。
你唯一关心的是:确保返回的集合是不可变的。
当您使用集合 class 中的各种 emptyXyz()
方法时,您会得到它。从这个意义上说:只要确保你总是使用这些方法;不要浪费时间考虑替代方案。
如:除非您在短时间内进行了数百万次调用,否则不要开始担心性能。编写简单、干净、可读的代码更为重要。因为当你这样做时,你(通常)也有不显着的代码 "slow".
意思是:当然,应该避免完全愚蠢的表现错误。但是,当涵盖该部分时 - 不要 假设 您应该担心性能。当 客户 抱怨时,性能就会成为一个问题。然后你 profile 你的代码在做什么,找出真正的麻烦制造者。如果您随后发现 emptyList()
是一件比其他任何东西都更昂贵并且让您付出太多代价的东西 - 然后回来写一个关于它的问题。 (这可能永远不会发生)