我使用重写的equal方法创建了自己的类,该方法只检查名称(类中的属性)是否相等。现在,我将该类的一些实例存储在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
}
对不起,我的英语能力不太好。如果你不明白我的意思,请再问一遍。
发布于 2014-12-01 14:03:38
在您的情况下,判断对象的一个特定实例是否包含在HashSet中的唯一方法是迭代HashSet的内容,并比较对象标识(使用==操作符而不是equals()方法)。
类似于:
boolean isObjectInSet(Object object, Set<? extends Object> set) {
boolean result = false;
for(Object o : set) {
if(o == object) {
result = true;
break;
}
}
return result;
}
发布于 2014-12-01 14:08:57
检查对象是否是同一个对象的方法是将它们与==进行比较,以查看对象引用是否相等。
亲切的问候,弗兰克
发布于 2014-12-01 14:01:26
您还必须重写hashCode方法。
https://stackoverflow.com/questions/27238093
复制