我有两个数组列表,其中包含许多模型对象。我想找到这些数组列表的区别。当我使用字符串而不是模型时,我与集合框架中的 removeall 函数有所不同。但是对于模型对象,它不起作用。请任何人帮助我
自定义对象中实现equals
和hashCode
,您可以使用与String
相同的方法。
好吧,removeAll
方法是一个通用库方法,它对模型类一无所知。 所以如果你考虑一下,它怎么知道哪些是"相同的"?
简短的回答是,您需要重写Model
类中的equals()
方法,因为这是检查所基于的。 对于您希望被视为相同的任何一对模型实例,实现应返回 true - 仅当它们在内存中是同一对象时,默认继承行为才会返回 true。 (与往常一样,当您覆盖equals()
时,您也必须覆盖hashCode()
)。
String
类已经覆盖了equals
和hashCode
方法的版本,因此您可以使用remove()
方法。如果必须在集合(List or Set)
中使用类,则必须在类中重写这些方法,否则它将使用这些方法的默认实现。
如果两个对象在逻辑上相等,这意味着它们的hashCode
必须相等并且满足 equals()。
要比较两个ArraList,您需要两个比较两个对象。在您的情况下,它是您的模型对象,为此您需要覆盖等于方法。试试这个代码 @Override 公共布尔值等于(对象比较Obj) { 如果(此 == 比较 Obj) 返回真;
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;
}