【问题标题】:Java, comparing objects [closed]Java,比较对象[关闭]
【发布时间】:2013-06-21 17:56:16
【问题描述】:

对不起,我是真正的 Java 初学者,所以这个问题可能已经有了答案,但我没能找到。 我想做一些等效的事情(我已经知道你实际上不能重载运算符):

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

这样做需要什么语法,我在哪里定义这个操作?

【问题讨论】:

    标签: java operators overloading


    【解决方案1】:

    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 &lt; b,写a.compareTo(b) &lt; 0

    或者,为了强加一个“外部排序”,写一个Comparator

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

    然后做comparator.compare(a, b) &lt; 0

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          在 Java 中有两个这样的接口:ComparableComparator

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

          【讨论】:

            【解决方案5】:

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

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

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

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2010-11-09
              • 2016-09-12
              • 1970-01-01
              相关资源
              最近更新 更多