【问题标题】:How to use java empty HashSet in if-statement?如何在 if 语句中使用 java 空 HashSet?
【发布时间】:2014-09-15 19:30:35
【问题描述】:
public static void main(String[] args) {
    Map<String, HashSet<String>> test = new HashMap<String, HashSet<String>>();

    test.put("1", new HashSet<String>());
    System.out.println(test);

    System.out.println(test.get("1"));

    if(test.get("1") == null){
        System.out.println("Hello world");
    }
}

第一个 println 得到我{1=[]} 第二个让我[]
我正在尝试打印出“Hello world”,但 if 语句没有通过。
空HashSet,[]不等于null吗?

如何在这个 if 语句中使用空的 HashSet?

【问题讨论】:

  • 没有包(null)和有空包(空HashSet)一样吗? (注意:我在这里使用“包”的真实含义,而不是数据结构。)
  • 在 Java 中,== 对两个对象(即不是原语)总是进行比较以查看它们是否是对同一对象的引用(或都为空)。在某些情况下,某些语言能够重新定义==,以便比较内容。 Java 没有。 (Java 通常使用equals() 来比较内容,但这对您没有帮助,因为HashSet 上的equals() 不认为空集等于空引用。他们可以这样定义,但他们没有。)

标签: java if-statement data-structures set hashset


【解决方案1】:

空的HashSet[]不等于null吗?

没错,不是。这正是您的代码如此行事的原因。

要检查null 和空集,请使用以下构造:

HashSet<String> set = test.get("1");
if (set == null || set.isEmpty()) {
  ...
}

【讨论】:

    【解决方案2】:

    空的HashSet 不是null。使用HashSet.size()添加测试

    if (test.get("1") == null || test.get("1").size() == 0) {
    

    或使用HashSet.isEmpty()

    if (test.get("1") == null || test.get("1").isEmpty()) {
    

    或者,你可以注释掉

    // test.put("1", new HashSet<String>());
    System.out.println(test);
    

    那么test.get("1")null

    【讨论】:

      【解决方案3】:

      您应该使用 Set_Obj.isEmpty() 方法。这将返回一个布尔值,检查集合中是否包含任何元素(true)。

      【讨论】:

        【解决方案4】:

        null 与空的HashSet 之间存在区别,这意味着“什么都没有”。一个空的HashSet 是一个实际的HashSet,但碰巧其中没有任何元素。这类似于null 与空字符串"" 不同,后者是一个没有字符的字符串。

        要检查HashSet 是否为空,请使用isEmpty 方法:

        if(test.get("1").isEmpty()){
            System.out.println("Hello world");
        }
        

        希望这会有所帮助!

        【讨论】:

          猜你喜欢
          • 2015-04-10
          • 2017-08-30
          • 1970-01-01
          • 2015-01-26
          • 2020-06-23
          • 2020-12-02
          • 1970-01-01
          • 1970-01-01
          • 2020-09-09
          相关资源
          最近更新 更多