Collections.emptyMap() vs new HashMap()
2022-08-31 07:29:06
我可以在哪些情况下使用?文档说,如果我希望我的集合是不可变的,我可以使用此方法。Collections.emptyMap()
为什么我想要一个不可变的空集合?有什么意义?
我可以在哪些情况下使用?文档说,如果我希望我的集合是不可变的,我可以使用此方法。Collections.emptyMap()
为什么我想要一个不可变的空集合?有什么意义?
来自 Effective Java 的 Item #43 - 演示了返回一个空集合,甚至可能演示如何在 Collections 类上使用这些 、和方法来获取一个空集合,该集合还具有不可变的额外好处。来自项目 #15 ."Return empty arrays or collections, not null"
emptyList()
emptySet()
emptyMap()
"Minimize Mutability"
它是一种编程习语。这适用于不需要空变量的人。因此,在初始化集合之前,他们可以使用空集合。
注意:下面的代码只是一个例子(根据您的用例进行更改):
private Set myset = Collections.emptySet();
void initSet() {
myset = new HashSet();
}
void deleteSet() {
myset = Collections.emptySet();
}
这些方法具有以下几个优点:
它们更简洁,因为您不需要显式键入集合的泛型类型 - 它通常只是从方法调用的上下文中推断出来的。
它们更有效率,因为它们不会费心创建新对象;他们只是重用现有的空和不可变对象。这种影响通常非常小,但它偶尔(嗯,很少)很重要。
诚然,根据我个人的经验,在API需要参数集合但您无需提供任何内容的情况下,它非常有用。例如,您可能有一个看起来像这样的API,并且不允许空引用:
public ResultSet executeQuery(String query, Map<String, Object> queryParameters);
如果你有一个不带任何参数的查询,那么创建一个HashMap肯定有点浪费,它涉及分配一个数组,当你可以传入“空映射”时,它实际上是一个常量,它在.java.util.Collections