为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

三国纷争 2021-12-01 15:25:54
我开发了一个程序,我将一些元素放入 ArrayList 中的对象中……这是我的代码import java.util.ArrayList;public class ListaConcepto {public static void main(String[] args) {    // TODO Auto-generated method stubArrayList<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……我需要一个方法来实现,看看元素是否相等,然后打印结果。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 回答

?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

记住Comparable是为了用于确定物品之间的关系以进行订购;这并不完全是为了平等。事实上,没有要求任何两个可比较的项目必须相等。


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


你的方法可能看起来像


public int compareTo(ComprarListas o){

    return this.NumeroParte - o.getNumeroParte();

}

之所以有效,是因为两者都是整数。


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


查看完整回答
反对 回复 2021-12-01
?
慕丝7291255

TA贡献1859条经验 获得超6个赞

如果你想知道一个对象是否等于另一个对象,你必须实现 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 并明确表示易于理解,但关键是您可以使用您想要比较对象的任何标准,如果您想稍后订购它们)。


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


查看完整回答
反对 回复 2021-12-01
  • 2 回答
  • 0 关注
  • 134 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信