申し訳ありませんが、私はJavaの初心者なので、この質問にはおそらくすでに答えがありますが、見つけることができませんでした. 私は同等のことをしたいです(実際に演算子をオーバーロードできないことはすでに知っています):
bool operator < (MyClass a, MyClass b) {/*code*/}
そのために必要な構文は何ですか? また、この操作はどこで定義すればよいですか?
申し訳ありませんが、私はJavaの初心者なので、この質問にはおそらくすでに答えがありますが、見つけることができませんでした. 私は同等のことをしたいです(実際に演算子をオーバーロードできないことはすでに知っています):
bool operator < (MyClass a, MyClass b) {/*code*/}
そのために必要な構文は何ですか? また、この操作はどこで定義すればよいですか?
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
。
等しいかどうかを確認したい場合は、equals()
とhashCode()
をオーバーライドする必要がありますMyClass
。次に、として確認できますa.equals(b)
。
それらを比較したい場合は、に実装できComparable
ますMyClass
。
異なるフィールドに基づいて比較したい場合は、Comparator
.
比較するメソッドを実装する必要があります。これは、実装することによって行う必要がありますComparable
。
public class MyClass implements Comparable
{
public int compareTo(Object o)
{
// Compare code
}
}
オブジェクトが同じ場合 (「myString」と「myString」など)、このメソッドは 0 を返す必要があります。このオブジェクトが比較対象のオブジェクトより小さい場合 (「aaa」と「bbb」など) は負の数を返します。 ")、このオブジェクトが比較対象のオブジェクトよりも大きい場合は正の数値 (たとえば、"ccc" と "bbb")。
負の数と正の数が 1 または負の数になる必要はなく、期待する必要もないことに注意してください。それは単に負か正でなければなりません。たとえば、2 つのオブジェクトがどのように比較されるかをより具体的に示すオフセットを返すことができます。
Java は、必要な演算子のオーバーロードをサポートしていません。オブジェクトの特定の値を比較するメソッドを作成できます。
Java には、このようなもののための 2 つのインターフェイスがあります。ComparableとComparatorです。
Comparable
はthis
別のオブジェクトと比較するためのもので、Comparator
は他の 2 つのオブジェクトを比較するために使用されます。