-1

申し訳ありませんが、私はJavaの初心者なので、この質問にはおそらくすでに答えがありますが、見つけることができませんでした. 私は同等のことをしたいです(実際に演算子をオーバーロードできないことはすでに知っています):

bool operator < (MyClass a, MyClass b) {/*code*/}

そのために必要な構文は何ですか? また、この操作はどこで定義すればよいですか?

4

5 に答える 5

4

MyClass実装してくださいComparable:

class MyClass implements Comparable<MyClass> {
   public int compareTo(MyClass other) {
     // returns a negative number if this < other, 0 if this == other,
     // a positive number if this > other
   }
}

そして、言うにはa < b、書くa.compareTo(b) < 0

別の方法として、「外部順序付け」を強制するには、次のように記述しComparatorます。

Comparator<MyClass> comparator = new Comparator<MyClass>() {
  public int compare(MyClass a, MyClass b) {
    // same rules
  }
};

してから行いますcomparator.compare(a, b) < 0

于 2013-06-21T17:59:30.773 に答える
1

等しいかどうかを確認したい場合は、equals()hashCode()をオーバーライドする必要がありますMyClass。次に、として確認できますa.equals(b)

それらを比較したい場合は、に実装できComparableますMyClass

異なるフィールドに基づいて比較したい場合は、Comparator.

于 2013-06-21T17:57:13.827 に答える
0

比較するメソッドを実装する必要があります。これは、実装することによって行う必要がありますComparable

public class MyClass implements Comparable
{
    public int compareTo(Object o)
    {
        // Compare code
    }
}

オブジェクトが同じ場合 (「myString」と「myString」など)、このメソッドは 0 を返す必要があります。このオブジェクトが比較対象のオブジェクトより小さい場合 (「aaa」と「bbb」など) は負の数を返します。 ")、このオブジェクトが比較対象のオブジェクトよりも大きい場合は正の数値 (たとえば、"ccc" と "bbb")。

負の数と正の数が 1 または負の数になる必要はなく、期待する必要もないことに注意してください。それは単に負か正でなければなりません。たとえば、2 つのオブジェクトがどのように比較されるかをより具体的に示すオフセットを返すことができます。

于 2013-06-21T18:02:55.443 に答える
0

Java は、必要な演算子のオーバーロードをサポートしていません。オブジェクトの特定の値を比較するメソッドを作成できます。

于 2013-06-21T17:59:04.583 に答える
0

Java には、このようなもののための 2 つのインターフェイスがあります。ComparableComparatorです。

Comparablethis別のオブジェクトと比較するためのもので、Comparatorは他の 2 つのオブジェクトを比較するために使用されます。

于 2013-06-21T17:59:48.457 に答える