如何在java中找到两个arraylist之间的区别

时间:2012-06-20 10:36:41

标签: java collections arraylist

我有两个带有许多模型对象的arraylist。我想找到这些arraylists的区别。当我使用字符串而不是模型时,我在集合框架中与removeall函数有所不同。但对于模型对象,它不起作用。请任何人帮助我

4 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:0)

嗯,removeAll方法是一种通用库方法,它不知道关于模型类的任何。所以,如果你想一下,它怎么知道哪些是“相同的”?

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

答案 2 :(得分:0)

String类已经覆盖了equalshashCode方法的版本,因此您可以使用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;
    }