Collections.emptyMap() vs new HashMap()

2022-08-31 07:29:06

我可以在哪些情况下使用?文档说,如果我希望我的集合是不可变的,我可以使用此方法。Collections.emptyMap()

为什么我想要一个不可变的空集合?有什么意义?


答案 1

来自 Effective JavaItem #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();
}

这些方法具有以下几个优点:

  1. 它们更简洁,因为您不需要显式键入集合的泛型类型 - 它通常只是从方法调用的上下文中推断出来的。

  2. 它们更有效率,因为它们不会费心创建新对象;他们只是重用现有的空和不可变对象。这种影响通常非常小,但它偶尔(嗯,很少)很重要。


答案 2

诚然,根据我个人的经验,在API需要参数集合但您无需提供任何内容的情况下,它非常有用。例如,您可能有一个看起来像这样的API,并且不允许空引用:

public ResultSet executeQuery(String query, Map<String, Object> queryParameters);

如果你有一个不带任何参数的查询,那么创建一个HashMap肯定有点浪费,它涉及分配一个数组,当你可以传入“空映射”时,它实际上是一个常量,它在.java.util.Collections