java的compareTo方法运行的原理
compareTo方法原理:先读取出字符串的第一个“字母”进行比较,比较的方法是ascii码表的值(字符所对应的十进制值),如果前面的大那么返回1,后面的大返回-1;此位置相同,继续比较下一位,直到最后一位,如果都相同的话,就返回0;
举例:
int cc= “13“.compareTo(“12“);
System.out.println(cc);
int dd= “11“.compareTo(“12“);
System.out.println(cc);
int dd= “aaa“.compareTo(“aaa“);
System.out.println(cc);
结果就是:1(换行) -1(换行)0。
java的compareto方法是谁的方法
compareTo(Object o) 方法是java.lang.Comparable《T》接口中的方法,
比较有两个方法经常搞混淆,现对其进行总结以加深记忆。
1.compareTo(Object o) 方法是java.lang.Comparable《T》接口中的方法,
当需要对某个类的对象进行排序时,该类需要实现Comparable《T》接口的,必须重写public int compareTo(T o)方法,
比如MapReduce中Map函数和Reduce函数处理的 《key,value》,其中需要根据key对键值对进行排序,
所以,key实现了WritableComparable《T》接口,实现这个接口可同时用于序列化和反序列化。WritableComparable《T》接口(用于序列化和反序列化)是Writable接口和Comparable《T》接口的组合;
2.compare(Object o1,Object o2)方法是java.util.Comparator《T》接口的方法,
它实际上用的是待比较对象的compareTo(Object o)方法。
下面我们写一来看看上面两个方法是怎么用的:
首先,写一个User类,代码如下:
public class User implements Comparable《Object》{
int id;
String name;
public User(int id,String name){
this.id = id;
this.name = name;
}
/*
* Getters and Setters
*/
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public int compareTo(Object o) {
if(this ==o){
return 0;
}
else if (o!=null && o instanceof User) {
User u = (User) o;
if(id《=u.id){
return -1;
}else{
return 1;
}
}else{
return -1;
}
}
}
接下来,我们写一个测试类Test:
public class Test{
//编写Comparator,根据User的id对User进行排序
private static final Comparator《User》 COMPARATOR = new Comparator《User》() {
public int compare(User o1, User o2) {
return o1.compareTo(o2);//运用User类的compareTo方法比较两个对象
}
};
public static void main(String args) {
ArrayList《User》 student = new ArrayList《User》();
User user1 = new User(1,“yueliming“);
User user2 = new User(2,“yueliming“);
Collections.sort(student, COMPARATOR);//用我们写好的Comparator对student进行排序
for(int i=0;i《student.size();i++){
System.out.println(student.get(i).getId());
}
}
}
compareTo方法怎么理解
lastName是当前对象的一个成员变量。这段代码的意思是比较Name对象的大小其实就是比较其成员变量lastName的大小。至于对象具体是哪个我也不清楚。Collections.sort(t);这个方法就是循环调用t列表里所有的对象的这个方法。
java中的String的compareTo()方法问题
楼主请看一下java api中对String类中compareTo方法的解释,
1.result.compareTo(result2)) 是根据第一个红框标注的方法比较的,即返回这两个字符串在位置 k 处两个char 值的差
2.“hello“.compareTo(“hello,“)
则是根据第二个红框标注的方式进行比较的,即返回这两个字符串长度的差
请楼主采纳
还是搞不明白compareTo()方法
1.先回答得到的返回值是负整数、零或正整数,和排序问题怎么联系:
返回这3种值对我们来说或许没有意义,但是这3个值告诉底层如何判断2个对象的大小,至于排序,我们是通过Collections.sort和Arrays.sort进行,而这2个方法在底层实现时,使用到了object1.compareTo(object2)这种方法进行判断谁大谁小,从而调整数组,最终给你返回有序的集合.注:你可以参考源代码,所有的排序都要用到调用的是Arrays.mergeSort(Object src,Object dest,int low,int high,int off).
2.Comparable还有Comparator的使用:当你自己写类时,如果希望这个类能按照自己的意愿进行排序,你就实现Comparable接口,你就是只要告诉底层怎么判断大小(即compareTo()),然后想排序,就是用Collections.sort(List list)即可;
而Comparator的使用:强行对某个对象 collection 进行整体排序,而集合里的对象可以是没有实现Comparable接口的对象,也可以是实现了Comparable接口的对象,使用这个排序器可以改变默认的排序时使用比较大小的方法,这时候底层进行排序就不再是用默认的自然排序,在底层对集合进行排序将不再是用Arrays.mergeSort(Object src,Object dest,int low,int high,int off),而是是用Arrays.mergeSort(Object src,Object dest,int low,int high,int off,Comparator c),比较大小则是用了c.compare(dest[j-1], dest[j])。
java compareto 是怎么比较的
java中的compareto方法,返回参与比较的前后两个字符串的asc码的差值。
如果两个字符串首字母不同,则该方法返回首字母的asc码的差值
参与比较的两个字符串如果首字符相同,则比较下一个字符,直到有不同的为止,返回该不同的字符的asc码差值,如果两个字符串不一样长,可以参与比较的字符又完全一样,则返回两个字符串的长度差值
字符串类中的CompareTo方法怎么用
compareTo()的返回值是整型,它是先比较对应字符的大小(ASCII码顺序),如果第一个字符和参数的第一个字符不等,结束比较,返回他们之间的
差值,如果第一个字符和参数的第一个字符相等,则以第二个字符和参数的第二个字符做比较,以此类推,直至比较的字符或被比较的字符有一方
全比较完,这时就比较字符的长度.
例:
String
s1
=
“abc“;
String
s2
=
“abcd“;
String
s3
=
“abcdfg“;
String
s4
=
“1bcdfg“;
String
s5
=
“cdfg“;
System.out.println(
s1.compareTo(s2)
);
//
-1
(前面相等,s1长度小1)
System.out.println(
s1.compareTo(s3)
);
//
-3
(前面相等,s1长度小3)
System.out.println(
s1.compareTo(s4)
);
//
48
(“a“的ASCII码是97,“1“的的ASCII码是49,所以返回48)
System.out.println(
s1.compareTo(s5)
);
//
-2
(“a“的ASCII码是97,“c“的ASCII码是99,所以返回-2)
s1.compareTo(s1.intValue())》0;//此方法判断是否为整型
这个是从百度提问上找到,我看了一下还是挺清楚的,不知道这个c#的compare
to方法是不是你要找的
Java 中 compareTo方法问题
compareTo方法原理:先读取出字符串的第一个“字母”进行比较,比较的方法是ascii码表的值(字符所对应的十进制值),如果前面的大那么返回1,后面的大返回-1;此位置相同,继续比较下一位,直到最后一位,如果都相同的话,就返回0;
举例:
int cc= “13“.compareTo(“12“);
System.out.println(cc);
int dd= “11“.compareTo(“12“);
System.out.println(cc);
int dd= “aaa“.compareTo(“aaa“);
System.out.println(cc);
结果就是:1(换行) -1(换行)0。
java中的compareTo(Object o)的方法怎么使用
compareTo方法中,如果前面的值大返回1,如果后面的大于,前面的,返回-1,或者等于前面的,返回0,举例:
int cc= “13“.compareTo(“12“);
System.out.println(cc);
int dd= “11“.compareTo(“12“);
System.out.println(cc);
int dd= “aaa“.compareTo(“aaa“);
System.out.println(cc);
结果就是:1(换行) -1(换行)0。
备注:除了compareTo方法外,为了比较字母,还有compareToIgnoreCase(忽略大小写比较),用法和compareTo方法相同。
Java compareTo方法是怎么比较的
ToDoItem类的对象有3属性,
这个compareTo()方法则是将一个ToDoItem对象作为参数,与调用该方法的对象做比较;
比较的方式:先比primary属性的大小,如果相等,则比较secondary属性,不比较item属性。
比较的结果:如果比参数对象大,则返回+1,如果相等,则返回0,如果比参数小,则返回-1。
这样说应该讲明白了吧,如果有帮助采纳下。
BTW平时这些问题可以多看几个类似w3shool、runoob这些教程网站,很快就可以弄懂。