【问题标题】:COMPARABLE - How to see if elements from objects are equals?COMPARABLE - 如何查看对象中的元素是否相等?
【发布时间】:2018-10-21 23:27:05
【问题描述】:

我正在开发一个程序,我将一些元素放入 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;
    }

}

【问题讨论】:

  • 问题是?你不知道如何实现equals方法?
  • 没错……我想知道
  • 这可能会有所帮助:stackoverflow.com/questions/27581/…
  • 先上网看看,有几十个tuto,或者使用IDE,点击“实现equals方法”,它会为你做,你会看到
  • CompareTo 基本上是一个相等检查,除了你返回 -1, 0, 1 以便而不是不相等,结果相等,你有 2 个不相等的值,1 和 - 1, 0 表示相等。之所以有 2 个不相等的值,是因为它告诉调用者对象应该在被比较的元素之前还是之后。

标签: java comparator comparable


【解决方案1】:

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

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

你的方法可能看起来像

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

这很有效,因为两者都是整数。

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

【讨论】:

  • 这是你怎么想的问题;有想法要做。目标会告诉你应该使用什么方法;零件号可能就足够了。
  • 我只需要看看我的对象的元素之间是否相等。我正在寻找 HashCode 和 equals 方法
  • 这可能会有所帮助;在这种情况下,您不需要使用可比较 - 可比较用于订购。如果您只需要“等于或不等于”(布尔值),那么只需使用equals。我认为这类似于比较形式中的所有属性 `return this.a == o.a && this.b.equals(o.b) && ...`
【解决方案2】:

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

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

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

但是,如果您想比较元素以便在其中进行排序等操作,则必须实现 Comparable 接口并实现 compareTo 方法

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

这将使对象能够相互比较,例如,根据您的标准知道一个对象是否比其他对象“更小”(在此示例中,我只使用了 NumeroParte 并明确表示易于理解,但关键是你可以使用任何你想比较对象的标准,如果你想稍后订购它们)。

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

【讨论】:

  • 谢谢!这很有帮助!
猜你喜欢
  • 2015-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-22
  • 1970-01-01
  • 2022-09-27
  • 1970-01-01
  • 2016-06-27
相关资源
最近更新 更多