代码之家  ›  专栏  ›  技术社区  ›  T. Marmash

哈希集。contains返回false,但不应返回false

  •  1
  • T. Marmash  · 技术社区  · 7 年前

    我正在尝试学习Java,并且已经达到了HashSet部分,长话短说,我正在测试contain方法。

    public static void main(String[] args) {
        HashSet<Integer> firstSet = new HashSet<>();
        firstSet.add(3);
    
        HashSet<Integer> secondSet = new HashSet<>();
        secondSet.add(3);
    
        boolean var = firstSet.contains(secondSet);
    
        System.out.println(var);
    
    }
    

    我相信这段代码应该返回true,而返回false。任何帮助!

    2 回复  |  直到 7 年前
        1
  •  4
  •   Sweeper    7 年前

    让我们看看 docs 对于 contains :

    如果此集合包含指定的元素,则返回true。更正式地说,当且仅当此集合包含元素e时,返回true (o==null ? e==null : o.equals(e)) .

    既然我们都知道这里没有空值,我们可以这样说 包含 将返回true,如果 o.equals(e) .

    o 是传递给的参数 包含 ,这是 HashSet . e 是第一个集合的元素,它应该是 Integer . 自从 整数 哈希集 是不相关的类型,它们不太可能相等。

    你似乎在这里犯了一个逻辑错误。要检查一个集合是否是另一个集合的超集,请调用 containsAll 而是:

    如果此集合包含指定集合中的所有元素,则返回true。

        2
  •  2
  •   Przemysław Moskal    7 年前
    boolean var = firstSet.contains(secondSet);
    

    这一行导致了问题,因为您没有从中检查特定元素的存在 secondSet ,您检查 firstSet 商店 全部的 第二套 就其本身而言,这显然是错误的。

    例如,您应该检查 . contains(secondSet.get(0)) .contains(3) .

    如果你想检查一下 第一套 包含中存在的所有元素 第二套 ,您可以使用 firstSet.containsAll(secondSet) .