我有两个带有许多模型对象的arraylist。我想找到这些arraylists的区别。当我使用字符串而不是模型时,我在集合框架中与removeall函数有所不同。但对于模型对象,它不起作用。请任何人帮助我
答案 0 :(得分:9)
在自定义对象中实施equals
和hashCode
,您可以使用与String
相同的方法。
答案 1 :(得分:0)
嗯,removeAll
方法是一种通用库方法,它不知道关于模型类的任何。所以,如果你想一下,它怎么知道哪些是“相同的”?
简短的回答是,您需要在Model
课程中override the equals()
method,因为这是检查的基础。对于您希望被视为相同的任何一对模型实例,实现应该返回true - 只有当它们是内存中的同一对象时,默认的继承行为才返回true。 (和往常一样,当你覆盖equals()
must override hashCode()
too时)。
答案 2 :(得分:0)
String
类已经覆盖了equals
和hashCode
方法的版本,因此您可以使用remove()
方法。如果你必须在集合(List or Set)
中使用你的类,那么你必须在你的类中重写这些方法,否则它将使用这些方法的默认实现。
如果两个对象在逻辑上相等,则意味着它们的hashCode
必须相等,并且它们满足等于()。
答案 3 :(得分:0)
为了比较两个ArraList,你需要两个比较两个对象。在你的情况下,它是你的模型对象,因为你需要覆盖equals方法。 试试这个代码 @覆盖 public boolean equals(Object compareObj) { if(this == compareObj) return true;
if (compareObj == null)
return false;
if (!(compareObj instanceof MyModel))
return false;
MyModel model = (MyModel)compareObj;
return this.name.equals(model.name); // Are they equal?
}
@Override
public int hashCode()
{
int primeNumber = 31;
return primeNumber + this.name.hashCode();
return 0;
}