String name;
public int compareTo(Object o)
{
Student s=(Student)o;
int i=num>s.num ? 1 : (num==s.num ? 0 : -1);
if(i==0)
{
i=name.compareTo(s.name);
}
return i;
}
这个是自己重写compareTo方法......有点想不通的是 最终只有一个 return 也就是只有一个返回
那么它又是怎么根据字母的大小写来根据排序的了?
也就是说 我的理解就是,不管怎么样 它都只返回了一个值,又怎么能将它进行字母的排序???
疑惑不解中 静待高手解决 谢谢!!!1
public int compareTo(Object o)
{
Student s=(Student)o;
int i=num>s.num ? 1 : (num==s.num ? 0 : -1);
if(i==0)
{
i=name.compareTo(s.name);
}
return i;
}
这个是自己重写compareTo方法......有点想不通的是 最终只有一个 return 也就是只有一个返回
那么它又是怎么根据字母的大小写来根据排序的了?
也就是说 我的理解就是,不管怎么样 它都只返回了一个值,又怎么能将它进行字母的排序???
疑惑不解中 静待高手解决 谢谢!!!1
if(i==0)
{
i=name.compareTo(s.name);//这里如果号码相等的话,根据名字排序。
}
return i;
可是它根据名字排序 换回的也只是一个int类型啊.....外面又只有一个sort进行排序.
是不是因为我们调用的name.compareTo()方法起到了作用了? 那么我们的 return i; 到底又是被谁接收了??
public class Student {
String name;
int num;
public Student (int num, String name) {
this.name = name;
this.num = num;
}
public int compareTo(Object o) {
Student s = (Student)o;
int i = this.num > s.num ? 1 : (this.num == s.num ? 0 : -1);
if(i==0) {
i=this.name.compareTo(s.name);
}
return i;
}
}代码补全了,this表示被比较的Student 对象,compareTo方法的传入参数object是比较对象。这不就是两个么?至于这个方法什么时候会用到,那要看你排序地方的结构了。 譬如java.util.List<Student> stdLst = new java.util.ArrayList<Student >();
stdLst.add(new Student(1,"b"));
stdLst.add(new Student(1,"a"));
调用stdLst.sort();之后变成
stdLst[
new Student(1,"a")),
new Student(1,"b")]
博客内有更精彩的内容
Compares this object with the specified object for order. Returns a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object你这个一定是先按num排序,再按name 排序,
至于你说sort,应该指的是有关Collection的sort 方法吧,它调用你现在重写的compareTo() 方法。
if(i==0)
{
i=name.compareTo(s.name);
}
return i;
这段代码里,首先按num来排序,如果num相同的情况下,执行name.compareTo(s.name) 按字母的大小写排序
如果单纯只对字母排序,不考虑num,就只 return name.compareTo(s.name)就行了.
那么是不是sort方法 本身在调用的过程当中它就判断出来到底是要对谁来进行排序了?
public int compareTo(Object o)
{
Student s=(Student)o;int i=num>s.num ? 1 : (num==s.num ? 0 : -1);
if(i==0)
{
i=name.compareTo(s.name);
}
return i;
}
这里变量i如果num大于s.num的话,就返回1;相等的话就返回0;小于的话就返回-1;
Student有两个关键字,首先对num进行排序,如果num相等的话就再次对名字进行排序。
两个对象比较,它一定会返回一个int类型的i,(可能为1,0,-1);这样就实现了排序的功能。
如果是多个Student比较的话就要调用多次compareTo()方法。两辆之间进行比较。
< == >
三元表达式
下面代码要害看不懂,我也无奈了if(num > s.num){
i = 1;
}else if (num == s.num) {
i = 0;
}else{
i = -1;
}
return i;
char a;
a='a';
a=97;
a='\0061';
三种赋值方式出来的都是a
这个comparTo到底是哪个comparTo自己不看看,name是什么类型的就是什么类的方法,自己不翻翻API,见过懒的没见过这么懒的
根据compareTo()返回的值来对list进行排序