【问题标题】:How can I compare two Strings using comparable interface?如何使用可比较的接口比较两个字符串?
【发布时间】:2018-11-29 06:23:57
【问题描述】:

下面提供的代码用于对int 值进行排序。我现在要做的,是将它们分类成Strings。

public class Comparable5 {

    public static void main(String[] args) {
        TreeSet ts = new TreeSet();
        ts.add(new Student1(2, "Thilan"));
        ts.add(new Student1(1, "Kamal"));
        ts.add(new Student1(3, "Nimal"));

        System.out.println(ts);
    }
}

class Student1 implements Comparable<Student> {

    int id;
    String name;

    public Student1(int id, String name) {
        this.id = id;
        this.name = name;
    }

    @Override
    public String toString() {
        return this.id + ":" + this.name;
    }

    @Override
    public int compareTo(Student o) {
        if (o.name.equals(this.name)) {
            return -1;
        } else if (o.name.equals(this.name)) {
            return +1;
        } else {
            return 0;
        }
    }
}

我正在尝试使用 Comparable 接口提升名称。我使用了equals() 方法,但是我无法获得升序。我尝试使用可比较的界面比较不同的对象。我使用了一个有两个参数的构造函数。

我已经对 ID 进行了排序,但无法按名称(字符串)对它们进行排序。如何在 Comparable 接口中使用compareTo() 方法对字符串进行排序?

【问题讨论】:

  • 最好先阅读class java doc
  • 你为什么不做o.name.compareTo
  • 感谢您的帮助。我已经找到了办法。我们可以。是的,我们可以使用 override compareTo()。

标签: java sorting collections comparable


【解决方案1】:

字符串具有可比性(即它实现了Comparable&lt;String&gt;),因此您可以调用字符串的compareTo() 方法。

@Override
public int compareTo(Student o) {
    return this.name.compareTo(o.name);
}

如果你想颠倒顺序,交换thiso

【讨论】:

    【解决方案2】:

    这里:

     @Override
     public int compareTo(Student o) {
       return this.name.compareTo(o.name);
     }
    

    是你需要的“全部”。

    当然,您真正需要了解的是这些compareTo() 方法背后的思想。您的代码暗示您没有。当两者相等时返回 0。只有这样!

    在您的情况下,您可以将所有工作委托给 String 类的 compareTo() 实现(它将使用字典排序来计算结果),例如,参见 here

    但正如所说:你真正的问题是缺乏理解为什么你在做事!除此之外:请注意引用可以是null。我的例子就是:一个例子。在现实世界的代码中,你必须做更多的事情,比如思考哪些值可能为空,以及你的代码应该如何响应,以避免异常飞来飞去。

    【讨论】:

      【解决方案3】:
       @Override
       public int compareTo(Student student) {
         return this.name.compareTo(student.name);
       }
      

      将此对象与指定对象进行比较以进行排序。返回负整数、零或正整数,因为此对象小于、等于或大于指定对象。

      【讨论】:

      • 虽然这段代码可能(或可能不会)解决问题,但一个好的答案总是需要解释这段代码如何提供帮助。
      【解决方案4】:

      注意这个

      class Student1 implements Comparable<Student>
      

      您可能会遇到问题。查看Comparable 的javadoc,你

      必须确保所有 x 和 y 的 sgn(x.compareTo(y)) == -sgn(y.compareTo(x))

      关系是传递的:(x.compareTo(y)>0 && y.compareTo(z)>0) 意味着 x.compareTo(z)>0。

      这意味着您还需要确保Student implements Comparable&lt;Student1&gt; 具有适当的比较。

      感觉这不是你想走的路。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-06-29
        • 1970-01-01
        • 1970-01-01
        • 2019-10-05
        • 2022-01-22
        • 1970-01-01
        • 2012-08-07
        • 2013-11-15
        相关资源
        最近更新 更多