可比性-如何查看对象中的元素是否相等?

时间:2018-10-21 23:27:06

标签: java comparator comparable

我正在开发一个程序,该程序将一些元素放入ArrayList的对象中……这是我的代码

import java.util.ArrayList;

public class ListaConcepto {

public static void main(String[] args) {
    // TODO Auto-generated method stub

ArrayList<CompararListas> Lista = new ArrayList<CompararListas>();

    CompararListas obj1 = new CompararListas("abc", 12.25, "lala", 2);
    CompararListas obj2 = new CompararListas("abc", 13.50, "lala", 3);
    CompararListas obj3 = new CompararListas("poc", 12.50, "jaja", 1);

    Lista.add(obj1);
    Lista.add(obj2);
    Lista.add(obj3);

    }    
}

然后...这是我的类,具有Comparable ...接口,并且我需要一种方法来实现以查看元素是否为EQUALS,然后打印结果。

public class CompararListas implements Comparable<CompararListas> {
    private String referencia;
    private double monto;
    private String descripcion;
    private double NumeroParte;


    public CompararListas(String referencia, double monto, String descripcion, double numeroParte) {
        this.referencia = referencia;
        this.monto = monto;
        this.descripcion = descripcion;
        this.NumeroParte = numeroParte;
    }


    public double getMonto() {
        return monto;
    }


    public void setMonto(double monto) {
        this.monto = monto;
    }


    public String getDescripcion() {
        return descripcion;
    }


    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }


    public double getNumeroParte() {
        return NumeroParte;
    }


    public void setNumeroParte(double numeroParte) {
        NumeroParte = numeroParte;
    }


    public String getReferencia() {
        return referencia;
    }


    public void setReferencia(String referencia) {
        this.referencia = referencia;
    }


    @Override
    public int compareTo(CompararListas o) {
        // TODO Auto-generated method stub
        return 0;
    }

}

2 个答案:

答案 0 :(得分:1)

记住Comparable是为了确定商品之间的关系以用于订购;平等不是相当。实际上,并没有要求两个可比较的项目必须相等。

在您的情况下,您可能想按NumeroParte进行订购,这意味着“部件号”,这似乎是明智的选择。每种类型的数据都有不同的组织方式。

您的方法可能类似于

public int compareTo(ComprarListas o){
    return this.NumeroParte - o.getNumeroParte();
}

之所以可行,是因为它们都是整数。

或对象的适当属性-例如,您可能想根据价格进行订购。

答案 1 :(得分:0)

如果您想知道一个对象是否等于另一个对象,则必须实现equals方法(它不需要您声明任何接口,每个类都可以做到)

@Override
public boolean equals(Object o) {
    CompararListas other = (CompararListas) o;
    return ...  
}

如果您只需要查找referencia.equals(other.referencia),或者必须比较每个属性,例如referencia.equals(other.referencia) && monto == other.monto && ...,则可以使用此方法返回使两个对象等于您的结果

但是,如果您想比较元素以便执行诸如排序元素之类的操作,则必须实现Comparable接口并实现compareTo方法

@Override
public int compareTo(CompararListas o) {
    if (NumeroParte < o.NumeroParte)
        return -1;
    else if (NumeroParte > o.NumeroParte)
        return 1;
    return 0;
}

这将使对象能够相互比较,例如根据您的条件知道一个对象是否比另一个小(在此示例中,我仅使用NumeroParte并使其明确易懂,但是关键是您可以使用任何要比较对象的条件,以及以后要订购它们的条件。

这些是针对不同问题的解决方案,您必须确定哪种情况更好。