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 doo.name.compareTo
?谢谢你的帮助。我已经找到了方法。我们可以。是的,我们可以使用override compareTo()。尽管这段代码可能(也可能不会)解决问题,一个好的答案总是需要解释这段代码是如何起作用的。