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