Collections.emptySet与新的HashSet <>

问题描述

如何验证Set是空集还是新的HashSet ()? 尝试了两种方法-

  1. size
  2. CollectionUtils.isEmpty() 两者都得出相同的值。

解决方法

当然,新鲜的new HashSet<>()是空的,Set.of()Collections.emptySet()也是如此。重点是:两个都是空集,我不知道为什么你要说出两者之间的区别。

一个区别是new HashSet<>()现在为空,但以后可能为空(可以更改;可以向其中添加内容),而根据规范,Set.of()的结果或Collections.emptySet(),它们现在为空,以后将为空:您无法向其中添加任何内容,对其调用.add将导致运行时异常。

这无异于问:我怎么知道它是否是不变的。不幸的是,您基本上不能这样做,所以可以回溯到:为什么要知道?

,

Collections.emptySet()返回EmptySet中的静态类java.util.Collections,但是new HashSet<>()返回java.util.HashSet类。这两个集合都是空的,即实例化后大小为0,但是您可以通过调用.getClass()来区分这两个集合,这将返回:

class java.util.Collections$EmptySet
class java.util.HashSet
,

使用.getClass查看所使用的不同实现。

,

我有一种可以用来执行操作的实用方法-

Collections.EMPTY_SET.equals(mySet)

非常感谢您的回答。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...