Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 可比较-如何查看对象中的元素是否相等?_Java_Comparator_Comparable - Fatal编程技术网

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

Java 可比较-如何查看对象中的元素是否相等?,java,comparator,comparable,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<CompararLis

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

    }    
}
import java.util.ArrayList;
公共类ListaConcepto{
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
ArrayList Lista=新的ArrayList();
比较标准obj1=新的比较标准(“abc”,12.25,“lala”,2);
比较标准obj2=新的比较标准(“abc”,13.50,“lala”,3);
CompariarListas obj3=新的CompariarListas(“poc”,12.50,“jaja”,1);
Lista.add(obj1);
Lista.add(obj2);
列表a.add(obj3);
}    
}
然后。。。这是我的类与界面可比。。。我需要一个方法来实现,看看元素是否相等,然后打印结果

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;
    }

}
public class comparizeristas实现了compariable{
私有字符串引用;
私人双蒙托;
私有字符串描述;
私人双号码;
公共比较表(字符串引用、双蒙托、字符串描述、双数字){
this.referecia=referecia;
this.monto=monto;
this.descripion=descripion;
this.numerioparte=numerioparte;
}
公共双盖蒙托(){
返回蒙托;
}
塞蒙托公共区(双蒙托){
this.monto=monto;
}
公共字符串getDescription(){
返回描述;
}
公共void setDescription(字符串Description){
this.descripion=descripion;
}
公共双getnumerioparte(){
返回数字报;
}
公共无效设置数字通行证(双数字通行证){
NumeroParte=NumeroParte;
}
公共字符串getReferencea(){
返回参考;
}
public void setreferencea(字符串referencea){
this.referecia=referecia;
}
@凌驾
公共国际比较组织(比较组织){
//TODO自动生成的方法存根
返回0;
}
}

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

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

您的方法可能类似于

public int compareTo(ComprarListas o){
    return this.NumeroParte - o.getNumeroParte();
}
这是因为两者都是整数


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

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

使用此方法,如果您只需要查找
referencea.equals(other.referencea)
或者需要比较每个属性,如
referencea.equals(other.referencea)&&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;
}
@覆盖
公共国际比较组织(比较组织){
如果(数字报o.NumeroParte)
返回1;
返回0;
}
这将使对象能够相互比较,例如,根据您的标准,可以知道其中一个对象是否比另一个对象“小”(在本例中,我仅使用NumeroParte,并将其显式化以便于理解,但关键是您可以使用任何要比较对象的标准,以及以后是否要对其排序)


这些都是不同问题的解决方案,您必须确定哪一个更好。

问题是什么?你不知道如何实现equals方法?没错。。。我想知道这可能会有帮助:首先在网上看一下,有十几个图图,或者使用一个IDE,点击“实现等于方法”,它会帮你实现,你会看到CompareTo基本上是一个等于检查,除了你返回-1,0,1,而不是不等于,因此,你有两个不等于的值,1和-1,0表示相等。之所以有两个不相等的值,是因为它告诉调用者对象应该在被比较的元素之前还是之后;还有很多事情要做。目标会告诉你应该使用什么方法;零件号可能足够了。我只需要看看我的对象的元素之间是否相等。我正在寻找HashCode和equals方法,这可能会有所帮助;在这种情况下,您不需要使用Compariable-Compariable用于排序。如果您只需要“等于或不等于”(布尔值),那么只需使用
equals
。我想这就像比较所有的属性,返回this.a==o.a&&this.b.equals(o.b)&&……`谢谢!这很有帮助!
@Override
public int compareTo(CompararListas o) {
    if (NumeroParte < o.NumeroParte)
        return -1;
    else if (NumeroParte > o.NumeroParte)
        return 1;
    return 0;
}