问题描述
如何验证Set是空集还是新的HashSet ()? 尝试了两种方法-
-
size
-
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)
非常感谢您的回答。