Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用可比较的接口比较两个字符串?_Java_Sorting_Collections_Comparable - Fatal编程技术网

Java 如何使用可比较的接口比较两个字符串?

Java 如何使用可比较的接口比较两个字符串?,java,sorting,collections,comparable,Java,Sorting,Collections,Comparable,下面提供的代码用于排序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

下面提供的代码用于排序
int
值。我现在要做的是将它们排序为
String
s

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;
        }
    }
}
公共类可比性5{
公共静态void main(字符串[]args){
树集ts=新树集();
ts.add(新学生1(2,“Thilan”);
ts.add(新学生1(1,“Kamal”);
ts.add(新学生1(3,“Nimal”);
系统输出打印项次(ts);
}
}
学生1班实行可比性{
int-id;
字符串名;
公立学生1(整数id,字符串名称){
this.id=id;
this.name=名称;
}
@凌驾
公共字符串toString(){
返回this.id+“:”+this.name;
}
@凌驾
公共内部比较(学生o){
如果(o.name.equals(this.name)){
返回-1;
}else if(o.name.equals(this.name)){
返回+1;
}否则{
返回0;
}
}
}
我正在尝试使用可比较的界面来提升名称。我使用了
equals()
方法,但无法获得升序。我尝试使用可比较的界面比较不同的对象。我使用了一个有两个参数的构造函数

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

字符串是可比较的(即它实现了
Comparable
),因此您可以调用字符串的
compareTo()
方法

@Override
public int compareTo(Student o) {
    return this.name.compareTo(o.name);
}
如果要颠倒顺序,请在此处交换
o

 @Override
 public int compareTo(Student o) {
   return this.name.compareTo(o.name);
 }
是你需要的全部

当然,您真正需要了解的是这些
compareTo()
方法背后的思想。你的代码意味着你没有。当这两个值相等时,返回0。只有那时

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

但正如所说:你真正的问题是不理解你为什么要做事情!除此之外:请注意引用可以为空。我的例子就是:一个例子。在现实世界的代码中,您需要做更多的工作,比如思考哪些值可以为null,以及您的代码应该如何对此做出反应,以避免异常四处飞舞

 @Override
 public int compareTo(Student student) {
   return this.name.compareTo(student.name);
 }
将此对象与订单的指定对象进行比较。返回一个负整数、零或正整数,因为此对象小于、等于或大于指定对象。

请注意

class Student1 implements Comparable<Student>
class Student1实现了可比较的
你可能会遇到问题。查看javadoc的
可比性
,您可以

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

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

这意味着您还需要确保
Student使用适当的比较实现可比较的


感觉这不是你想走的路。

最好的办法是从阅读Why't you do
o.name.compareTo
?谢谢你的帮助。我已经找到了方法。我们可以。是的,我们可以使用override compareTo()。尽管这段代码可能(也可能不会)解决问题,一个好的答案总是需要解释这段代码是如何起作用的。