【发布时间】:2015-01-30 00:44:42
【问题描述】:
我使用重写的 equals 方法创建了自己的类,该方法只检查名称(类中的属性)是否相等。现在我将该类的一些实例存储在 HashSet 中,这样 HashSet 中就没有同名的实例。
我的问题:如何检查 HashSet 是否包含这样的对象。 .contains() 在这种情况下不起作用,因为它适用于 .equals() 方法。我想检查它是否真的是同一个对象。
编辑:
package testprogram;
import java.util.HashSet;
import java.util.Set;
public class Example {
private static final Set<Example> set = new HashSet<Example>();
private final String name;
private int example;
public Example(String name, int example) {
this.name = name;
this.example = example;
set.add(this);
}
public boolean isThisInList() {
return set.contains(this);
//will return true if this is just equal to any instance in the list
//but it should not
//it should return true if the object is really in the list
}
public boolean remove() {
return set.remove(this);
}
//Override equals and hashCode
}
对不起,我的英语水平不是很好。如果您不明白我的意思,请随时再次询问。
【问题讨论】:
-
覆盖
equals()时必须覆盖hashCode()。 -
我知道,但这不是我的问题。
-
这听起来更像是一个糟糕的设计,需要解决,而不是具体的实现。
-
那么,您对这两种方法都有覆盖,但它仍然不起作用? “这样的对象”是什么意思?你有一些你正在寻找的实际对象吗?
-
@stonar96 那么你的问题不清楚。请更新它以包含已覆盖
hashCode的事实。但在这种情况下,contains应该会找到您的对象。还请提供任何相关代码和数据,以便我们重现您的问题。
标签: java object equals contains hashset