Java 如何实现Evaluates在列表中包含的类
我有: -覆盖hashCode()的MyClass -我将尽量避免使用列表的contains()方法将具有相同内容的MyClass的第二个实例添加到列表中 我怎样才能做到这一点?我认为这是通过重写hashCode()方法来实现的 我想代码比文字更能说明问题Java 如何实现Evaluates在列表中包含的类,java,list,contain,Java,List,Contain,我有: -覆盖hashCode()的MyClass -我将尽量避免使用列表的contains()方法将具有相同内容的MyClass的第二个实例添加到列表中 我怎样才能做到这一点?我认为这是通过重写hashCode()方法来实现的 我想代码比文字更能说明问题 public class TestClass { public static void main(String[] args){ MyClass myclass1 = new MyClass(2);
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;
}
}
您必须重写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且与原始实例类型相同后,必须比较键字段
在您的示例中,您的类是MyClass,equals中的比较应该是with==而不是equals,因为您没有在字段中使用int而不是Integer。您需要
equals()
。我也尝试过了。我刚刚更新了上面的代码。但它仍然不起作用。你能检查一下代码吗?(重写是不可能的,我只是添加了不带注释的equals@override)equals
是用Object
参数定义的。您当前正在重载该方法。确定。我懂了。谢谢。始终尝试使用类类型。谢谢。我该如何实施平等的方法?我更新了代码。你能复习一下吗,因为它仍然不起作用。
@Override
public boolean equals(Object obj) {
boolean eq = false;
if (obj != null && obj instanceof YOURCLASS) {
eq = this.getId().equals((YOUCLASS)obj.getId());
}
}