如何实现评估列表中包含的 class
howto implement a class that evealuates contains in a list
我有:
- MyClass 被 hashCode() 覆盖
- 我将尽量避免使用 List.
的 contains() 方法将具有相同内容的第二个 MyClass 实例添加到 List。
我怎样才能做到这一点?我认为这是通过重写 hashCode() 方法完成的?
我猜代码说的比字多
public class TestClass {
public static void main(String[] args){
MyClass myclass1 = new MyClass(2);
MyClass myclass2 = new MyClass(2);
List<MyClass> myclasses = new ArrayList<MyClass>();
myclasses.add(myclass1);
if(!myclasses.contains(myclass2)){
myclasses.add(myclass2);
System.out.println("I'll add ...");
}
System.out.println(myclasses.size());
}
}
public class MyClass {
int id = -1;
String something = "";
public MyClass(int idparam){
this.id = idparam;
}
@Override
public int hashCode() {
return id;
}
}
已更新Class:
public boolean equals(MyClass secondmyclass) {
return secondmyclass.id == this.id;
}
您必须覆盖 equals 和 hashcode 方法。该对象不包含在列表中,因为它不等于列表中的任何实例,即使它生成相同的哈希码也是如此。
@Override
public boolean equals(Object obj) {
boolean eq = false;
if (obj != null && obj instanceof YOURCLASS) {
eq = this.getId().equals((YOUCLASS)obj.getId());
}
}
Equals 方法应该如下所示。 YOURCLASS 是添加到列表中的 bean 的名称。您必须在验证 obj 实例不为 null 并且与原始实例属于同一类型后比较关键字段。
在您的示例中,YOURCLASS 是 MyClass,equals 中的比较应该使用 == 而不是 equals,因为您没有在该字段中使用 int insteand of Integer。
我有: - MyClass 被 hashCode() 覆盖 - 我将尽量避免使用 List.
的 contains() 方法将具有相同内容的第二个 MyClass 实例添加到 List。我怎样才能做到这一点?我认为这是通过重写 hashCode() 方法完成的?
我猜代码说的比字多
public class TestClass {
public static void main(String[] args){
MyClass myclass1 = new MyClass(2);
MyClass myclass2 = new MyClass(2);
List<MyClass> myclasses = new ArrayList<MyClass>();
myclasses.add(myclass1);
if(!myclasses.contains(myclass2)){
myclasses.add(myclass2);
System.out.println("I'll add ...");
}
System.out.println(myclasses.size());
}
}
public class MyClass {
int id = -1;
String something = "";
public MyClass(int idparam){
this.id = idparam;
}
@Override
public int hashCode() {
return id;
}
}
已更新Class:
public boolean equals(MyClass secondmyclass) {
return secondmyclass.id == this.id;
}
您必须覆盖 equals 和 hashcode 方法。该对象不包含在列表中,因为它不等于列表中的任何实例,即使它生成相同的哈希码也是如此。
@Override
public boolean equals(Object obj) {
boolean eq = false;
if (obj != null && obj instanceof YOURCLASS) {
eq = this.getId().equals((YOUCLASS)obj.getId());
}
}
Equals 方法应该如下所示。 YOURCLASS 是添加到列表中的 bean 的名称。您必须在验证 obj 实例不为 null 并且与原始实例属于同一类型后比较关键字段。
在您的示例中,YOURCLASS 是 MyClass,equals 中的比较应该使用 == 而不是 equals,因为您没有在该字段中使用 int insteand of Integer。