contains方法忽略等于覆盖

URL*_*L87 2 java overriding equals set

拥有扩展他的Node抽象类Cell.

Cell我实施public boolean equals(Node cmpCell).我created Set<Node> closeList = new HashSet<Node>();和我执行时closeList.contains((Cell) node)调试它并检测到它完全忽略了Cell equals我实现的.我做错了什么?

编辑:

我改变了Cell

@Override
public boolean equals(Object cmpCell)
Run Code Online (Sandbox Code Playgroud)

仍然closeList.contains((Cell) node)没有使用上面的覆盖.

第二编辑:

Cell课堂上有2名成员 -

int colIndex ;
int rowIndex ;
Run Code Online (Sandbox Code Playgroud)

equals覆盖只是他们比较了二等的成员,我认为这将是更好的我用HashMap<K, V>,但我仍是空地知道如何hashCode应该看起来像这样的情况?

Roh*_*ain 9

public boolean equals(Node cmpCell)
Run Code Online (Sandbox Code Playgroud)

这不是有效的覆盖.类的equals方法的语法Object是: -

public boolean equals(Object)
Run Code Online (Sandbox Code Playgroud)

是的,正如在评论中指出@JonSkeet,每当你要重写equals方法,也记得要重写hashCode方法按照合同equalshashCode.因为如果你不这样做,那么即使你的equals方法显示你的实例评估相等,类中的默认hashCode实现Object也会different hashCodes为它们生成,因此它们将不相等.

此外,请确保在计算时hashcode仅考虑用于比较equals方法实例的那些属性.否则,你会得到不正确的结果.

除此之外,如果你使用的是像任何IDE Eclipse的,它会产生一个非常漂亮覆盖和兼容equals,并hashCode为你的方法.你应该更好地使用它们.你需要right-click上课,去source选择Generate equals and hashCode method.