我有两个arrayList <myobject>,我不能使用equals()来正确比较它们。为什么?</MyObject来>

时间:2014-10-18 23:40:47

标签: java arraylist equals

我有两个arrayLists<myObject>,其中myObject是我创建的自定义类的对象。我希望能够使用equals()方法比较这些arrayLists。

在阅读并寻找答案之后,我已经读过int[]等某些对象在引用相同内容时仅被equals()方法视为相等。

为了解决这个问题,我尝试覆盖自定义对象中的equals方法。我的对象有3个属性(所有基本类型),所以我的equals方法现在返回true如果所有3个属性都等于被比较对象的属性,否则返回false。但是,比较arraylists仍然不起作用。我做错了什么?

请原谅我解释代码而不是发布代码,我这样做是因为变量和名称不是英文。

编辑:好的,这是代码。 Compra是我的自定义类; cantidadconceptoid是其属性。

@Override
    public boolean equals(Object obj) {
        boolean result = true;

        if (obj == null) {
            result = false;
        }else{
            Compra comprobada = (Compra) obj;
        if(!(this.id == comprobada.getId())){
        result = false;
       }
        if(!(this.cantidad == comprobada.getCantidad())){
        result = false;
       } if(!this.concepto.equals(comprobada.getConcepto())){
        result = false;
       }

        }
        return result;

    }

2 个答案:

答案 0 :(得分:1)

基于这个: How can I check if two ArrayList differ, I don't care what's changed

如果你已经实现了自定义对象等于正确(你实际上覆盖它并拥有你的)并且arrayList的大小是相同的,并且每对对象都相等,那么它将返回相等。换句话说,你要做的事情是完全正确的,但你的数组列表实际上并没有完全相同的对象确切的顺序

通过执行System.out.println()调查正在进行的操作,确保在检查集合相等性时调用了equal。 如果你不介意,请发送你的对象的平等。

我在一个孤立的例子中运行你的代码并且工作正常(outtputs为true) - 我改进了equals方法,所以如果检查好像只有其中一个不相等就应该返回false。

 class stackoverflow {
    public static void main(String args[]){
        ArrayList<Compra> array1 = new ArrayList<>();
        ArrayList<Compra> array2 = new ArrayList<>();
        array1.add(new Compra(1,2,"test"));
        array2.add(new Compra(1,2,"test"));
        System.out.println(array1.equals(array2));
   }
}
class Compra {
    int id;
    int cantidad;
    String concepto;

    public Compra(int id, int cantidad, String concepto){
        this.id = id;
        this.cantidad = cantidad;
        this.concepto = concepto;
    }



    public boolean equals(Object obj) {


        if (obj == null) {
             return false;
        }else{
             Compra comprobada = (Compra) obj;
             if(!(this.id == comprobada.getId())){
                   return false;
             }
             if(!(this.cantidad == comprobada.getCantidad())){
                   return false;
             } 
             if(!this.concepto.equals(comprobada.getConcepto())){
                   return false;
             }

        }
        return true;
    }



    public int getId() {
        return id;
    }




    public int getCantidad() {
        return cantidad;
    }




    public String getConcepto() {
        return concepto;
    }


}

要检查的一些事项:

  • 您确定不要更改ArrayList中的内容的顺序吗?:
  • 您是否打印以确保这些等于检查并按预期返回true或false?
  • 您确定Concepto字符串完全相同,具有相同的大小写并且不包含额外的空格等吗?

答案 1 :(得分:0)

由于您尚未发布代码,我建议您查看Comparable class和方法compareTo以及如何将其用于自定义类。