Java Collections.emptySet()与新哈希集<&燃气轮机;()

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(),它们现

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

  • 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
    ,用于检查它是否不仅相等,而且是同一个对象。