为什么HashSet.contains()返回错误的结果?

时间:2019-06-09 10:19:10

标签: java hashset

我有以下类和方法:

sliding in from the trailing edge

T的实现:

zoom and fade out when it is dismissed

主要方法:

public class Node<T> {
    private T val ;
    private Node parent;

    public Node(T s, Node p)
    {
        val=s;
        parent=p;
    }

    public Node(T s)
    {
        val=s;
    }

    public boolean equals(Node s)
    {
        return this.val.equals(s.val);
    }

    public int hashCode()
    {
        return val.hashCode();
    }

有人知道为什么我在set.contains中弄错了吗?从我阅读的内容来看,第一项检查基本上是set.contains的作用。我在Point类和Node类中实现了hashCode并等于它。

1 个答案:

答案 0 :(得分:2)

您的Node类的equals方法不会覆盖超类,因为它具有不同的签名,它采用Node对象参数而不是Object的任何实例。 更改为

public boolean equals(Object s) {
    if (!(s instanceof Node))
        return false;
    return this.val.equals(((Node) s).val);
}