是的,你将不得不重写你的equals()方法中MyClass类方法。
下面是一个例子:
public class MyClass {
private String name;
private String gender;
public MyClass(String name, String gender) {
this.name = name;
this.gender = gender;
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null) return false;
if (getClass() != obj.getClass()) return false;
MyClass other = (MyClass) obj;
if (gender == null) {
if (other.gender != null) return false;
} else if (!gender.equals(other.gender)) return false;
if (name == null) {
if (other.name != null) return false;
} else if (!name.equals(other.name)) return false;
return true;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((gender == null) ? 0 : gender.hashCode());
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
注意这是一个良好的编程习惯来覆盖哈希码()当您覆盖等于()方法,特别是在哈希概念进入画面场景例如HashMap。
然后,您可以比较如下:
public class Test {
public static void main(String args[]) throws Exception {
MyClass myFirstClass = new MyClass("John", "Male");
MyClass mySecondClass = new MyClass("Jessica", "Female");
Set<MyClass> mySet = new HashSet<MyClass>();
mySet.add(myFirstClass);
mySet.add(mySecondClass);
MyClass myDupeClass = new MyClass("Jessica", "Female");
for (MyClass someClass: mySet) {
if (someClass.equals(myDupeClass)) {
System.out.println("Match found for: " + someClass.getName());
}
}
}
}
输出为预期
Match found for: Jessica
http://docs.oracle。com/javase/7/docs/api/java/util/Set.html#contains(java.lang.Object)&http://docs.oracle.com/javase/7/docs/api/java/util/Map .html#values%28%29&http://stackoverflow.com/q/27581/139010 –
你想要找出一个键或值吗? –