Java Collections.emptySet()与新哈希集<&燃气轮机;()
如何验证集合是空集合还是新HashSet()? 尝试了两种方法-Java Collections.emptySet()与新哈希集<&燃气轮机;(),java,collections,hashset,is-empty,Java,Collections,Hashset,Is Empty,如何验证集合是空集合还是新HashSet()? 尝试了两种方法- size CollectionUtils.isEmpty() 两者产生相同的值 当然,一个新的newhashset()是空的,Set.Of()或Collections.emptySet()也是空的。关键是:两者都是空集,我不知道你为什么要区分这两者 一个区别是,newhashset()现在是空的,但以后可能不会为空(可以更改;您可以向其中添加内容),而根据规范,Set.of()或Collections.emptySet(),它们现
size
CollectionUtils.isEmpty()
两者产生相同的值当然,一个新的
newhashset()
是空的,Set.Of()
或Collections.emptySet()
也是空的。关键是:两者都是空集,我不知道你为什么要区分这两者
一个区别是,newhashset()
现在是空的,但以后可能不会为空(可以更改;您可以向其中添加内容),而根据规范,Set.of()
或Collections.emptySet()
,它们现在为空,以后将为空:您不能向它们添加任何内容,调用.add将导致运行时异常
这等于在问:我如何知道它是否是不变的。不幸的是,您基本上不能这样做,因此可以直接回到:为什么您需要知道?集合。emptySet()
返回java.util.Collections
中的静态类emptySet
,但新HashSet()
返回java.util.HashSet
类。两个集合在实例化后都将为空,即size=0,但您可以通过调用.getClass()
来区分这两个集合,该函数将返回:
class java.util.Collections$EmptySet
class java.util.HashSet
使用.getClass查看所使用的不同实现。我得到了一个可用于执行该操作的实用工具方法- Collections.EMPTY_SET.equals(mySet)
谢谢大家的回答。你为什么需要知道?
set==Collections.EMPTY\u set
那是错误的Collections.EMPTY_SET.equals(new HashSet())
将计算为true
。显然,你是从其他地方得到这个想法的,并且在没有真正理解的情况下使用了它,甚至没有重新检查结果。这就是所谓的货物崇拜编程。正确的术语是Collections.EMPTY_SET==mySet
,用于检查它是否不仅相等,而且是同一个对象。