Java,比较对象

时间:2013-06-21 17:56:17

标签: java operators overloading

对不起,我是一个真正的Java初学者,所以这个问题可能已经有了答案,但我无法找到它。 我想做一些相当于(我已经知道你实际上不能重载运算符)的东西:

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

执行此操作所需的语法是什么,以及在何处定义此操作?

5 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

如果要检查是否相等,则需要覆盖equals()中的hashCode()MyClass。然后,您可以检查为a.equals(b)

如果您想比较它们,那么您可以在Comparable中实施MyClass

如果您想根据不同的字段进行比较,请写一个Comparator

答案 2 :(得分:0)

java不支持您想要的运算符重载。您可以创建一种方法来比较对象的特定值。

答案 3 :(得分:0)

Java中有两个类似的接口:ComparableComparator

Comparable用于将this与另一个对象进行比较,而Comparator用于比较另外两个对象。

答案 4 :(得分:0)

您将不得不实施比较方法。这应该通过实施Comparable来完成。

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

如果对象相同,此方法必须返回0(例如,“myString”和“myString”),如果此对象小于我们要比较的对象,则返回负数(例如,“aaa”和“bbb”),如果此对象大于我们正在比较的对象(例如,“ccc”和“bbb”),则为正数。

请注意,它不必也不应该预期负数和正数将是一个或负数。它必须是消极或积极的。例如,我们可以返回一个偏移量,它更具体地告诉我们两个对象如何比较。