如果我以 a 为例HashSet<E>
,并向其中添加对象,它如何检查对象是否已经存在?
我有以下简单的设置:
private class MyObject {
String text;
public MyObject(String text) {
this.text = text;
}
@Override
public boolean equals(Object o) {
if (o != null && o instanceof MyObject) {
return ((MyObject) o).text.equals(text);
}
return false;
}
}
在我的项目中,我有很多这样的对象,但都是单独初始化的。我想通过将 all 添加到 a 来过滤双打,Set
如下所示:
MyObject m1 = new MyObject("1");
MyObject m2 = new MyObject("1");
MyObject m3 = new MyObject("2");
System.out.println(m1.equals(m2)); //expected: true, result: true
System.out.println(m1.equals(m3)); //expected: false, result: false
Set<MyObject> myObjects = new HashSet<MyObject>();
myObjects.add(m1);
myObjects.add(m2);
myObjects.add(m3);
System.out.println(myObjects.size()); //expected: 2, result: 3
Set<String> stringList = new HashSet<String>();
stringList.add("1");
stringList.add("1");
stringList.add("2");
System.out.println(stringList.size()); //expected: 2, result: 2
我怎样才能使我的myObjects
套装不包含这些双打?所以m1
和m2
是不同的实例,但具有相同的内容,所以我只需要m1
.
编辑
基于 Mathias Schwarz 的回答,我实现了hashCode()
如下功能:
@Override
public int hashCode() {
return text.hashCode();
}
但是,如果我有一个包含多个字段的更复杂的类,我将如何实现此方法?