1

我有两个带有多个模型对象的数组列表。我想找出这些数组列表的区别。当我使用字符串而不是模型时,我得到了集合框架中的 removeall 函数的区别。但对于模型对象,它不起作用。请任何人帮助我

4

4 回答 4

9

在您的自定义对象中实现equalshashCode,您可以使用与Strings 相同的方法。

于 2012-06-20T10:38:41.120 回答
0

好吧,该removeAll方法是一个通用库方法,它对您的模型类一无所知所以如果你想一想,它怎么知道哪些是“相同的”?

简短的回答是您需要覆盖类中的equals()方法Model,因为这是检查的基础。对于您希望被视为相同的任何一对模型实例,实现应该返回 true - 默认继承行为仅在它们是内存中的相同对象时才返回 true。(和往常一样,当您覆盖时,您equals()必须覆盖hashCode())。

于 2012-06-20T10:39:55.037 回答
0

Stringclass 已经覆盖了equalsandhashCode方法的版本,因此您可以使用remove()方法。如果您必须在集合中使用您的类, (List or Set)那么您将必须在您的类中覆盖这些方法,否则它将使用这些方法的默认实现。

如果两个对象在逻辑上相等,则意味着它们hashCode必须相等并且它们满足 equals()。

于 2012-06-20T10:47:19.970 回答
0

要比较两个 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;
    }
于 2012-06-21T05:14:54.927 回答