1

public int compareToメソッドを使用して2つのオブジェクトを比較するにはどうすればよいですか?オブジェクト内の値を別のオブジェクトの値と比較して、より大きい/より小さいかどうかをテストする必要があります。したがって、2つのオブジェクトのaと2つのオブジェクトのbをそれぞれ比較します。

Test x1 = new Test(9999,9999);
Test x2 = new Test(0,0);

public class Test{
    private int a;
    private int b;

    public Test(){
        a = 0;
        b = 0;
    }


    public Test(int a, int b){
        this.a = a;
        this.b = b;
    }
}
4

6 に答える 6

1

Compareable<T>クラスへのインターフェースを実装しますTest。インターフェイスには、比較するオブジェクトを受け入れるCompareable単一のメソッドがあります。comapreTo

class Test implements Compareable<Test>{
    ...
    @Override
    public int compareTo(Test test) {
        // write logic for compare 
        //a negative integer, zero, or a positive integer as 
        //this object is less than, equal to, or greater than the specified object
        return 0;
    }
}

class Main{
    public static void main(String[] args){
        Test x1 = new Test(9999,9999);
        Test x2 = new Test(0,0);
        int x3 = x1.compareTo(x2);
    }
}

このインターフェースは、実際には、それを実装する各クラスのコレクション内のオブジェクトに全順序を課します。この順序はクラスの自然順序と呼ばれ、クラスのcompareToメソッドはそのnatural comparisonメソッドと呼ばれます。これは、オブジェクトのコレクションを特定の順序で並べ替えるのに役立ちます。

于 2013-01-22T06:50:52.010 に答える
0

Comparable Interfaceを実装してから、クラスのcompareToメソッドをオーバーライドするクラスが必要です。この方法では、適切な比較を行う必要があります。

于 2013-01-22T06:51:03.680 に答える
0

Test クラスは Comparable インターフェイスを実装し、compareTo() メソッドをオーバーライドする必要があります。

int compareTo(Test o){

 // return a negative integer, zero, or a positive integer as per your logic.

// Less than means calling object is less than o.

}
于 2013-01-22T06:55:58.127 に答える
0

まずCompareable<T>、クラスに実装する必要があります。理由は次のとおりです

このインターフェイスは、それを実装する各クラスのオブジェクトに全体的な順序付けを課します。この順序付けはクラスの自然順序付けと呼ばれ、クラスの compareTo メソッドはその自然比較メソッドと呼ばれます。

CompareToのコントラクト

class Test implements Compareable<Test>{

    @Override
    public int compareTo(Test test) {
        // write logic for compare  based on the contract of compareTo
        return 0;
    }

  ...

}
于 2013-01-22T06:56:47.377 に答える
0

コレクション内の比較対象および比較対象のすべての例で詳細を確認できます

于 2013-01-22T06:58:18.883 に答える
0

オブジェクトの比較は、インターフェイス Comparable/Comparator のいずれかを使用して Java で行うことができます。Comparable インターフェイスはオブジェクトの自然順序付けを指定するために使用されますが、コンパレーターは一般にプログラマーが特定のオブジェクトに続く自然順序付けを変更し、ソート設定を指定するために使用されます。

あなたの例では

public class Test implements Comparable<Test> {
private final int a;
private final int b;

public static void main(String[] args) {
    Test x1 = new Test(9999, 9999);
    Test x2 = new Test(0, 0);

    int comparisionVal = x1.compareTo(x2);

    System.out.println(comparisionVal > 0 ? "First object is greater"
            : (comparisionVal < 0 ? "Second object is greater"
                    : "both are equal"));

}

public Test() {
    this.a = 0;
    this.b = 0;
}

public Test(int a, int b) {
    this.a = a;
    this.b = b;
}

@Override
public int compareTo(Test o) {
    return this.a - o.a; // ascending based on a
    // return this.a - o.a; // descending based on a
}

@Override
public String toString() {
    return "a = " + this.a + "; b = " + this.b;
}

}

Comparable と Comparator は、通常、並べ替えに使用されます。これは、以下の例で説明できます

public class Test implements Comparable<Test> {
private final int a;
private final int b;

public static void main(String[] args) {
    Test x1 = new Test(9999, 9999);
    Test x2 = new Test(0, 0);
    Test x3 = new Test(4444, 4444);
    Test x4 = new Test(555, 555);

    List<Test> list = new ArrayList<Test>();

    list.add(x1);
    list.add(x2);
    list.add(x3);
    list.add(x4);

    Collections.sort(list);

    System.out.println("The object in ascending order: " + list);

    // If you wish to do a descending sort that is where you'd use
    // comparator
    Collections.sort(list, new Comparator<Test>() {
        @Override
        public int compare(Test o1, Test o2) {
            return o2.a - o1.a;
        }
    });
    System.out.println("The object in descending order: " + list);

}

public Test() {
    this.a = 0;
    this.b = 0;
}

public Test(int a, int b) {
    this.a = a;
    this.b = b;
}

@Override
public int compareTo(Test o) {
    return this.a - o.a; // ascending based on a
    // return this.a - o.a; // descending based on a
}

@Override
public String toString() {
    return "a = " + this.a + "; b = " + this.b;
}

}

于 2013-01-22T07:28:35.083 に答える