java中的compareto方法的详细介绍
javacompareTo
java中的compareto方法,返回参与比较的前后两个字符串的asc码的差值,看下面一组代码
String a="a",b="b";
System.out.println(a.compareto.b);
则输出-1;若a="a",b="a"则输出0;若a="b",b="a"则输出1;
单个字符这样比较,若字符串比较长呢??
若a="ab",b="b",则输出-1;
若a="abcdef",b="b"则输出-1;也就是说,如果两个字符串首字母不同,则该方法返回首字母的asc码的差值;
如果首字母相同呢??
若a="ab",b="a",输出1;
若a="abcdef",b="a"输出5;
若a="abcdef",b="abc"输出3;
若a="abcdef",b="ace"输出-1;
即参与比较的两个字符串如果首字符相同,则比较下一个字符,直到有不同的为止,返回该不同的字符的asc码差值,如果两个字符串不一样长,可以参与比较的字符又完全一样,则返回两个字符串的长度差值
分两种情况:1、如果这两个字符串不同,compareTo返回这两个字符串在位置k处两个char值的差,即值为this.charAt(k)-anotherString.charAt(k)。
2、如果没有字符不同的索引位置,则较短字符串的字典顺序在较长字符串之前。在这种情况下,
compareTo返回这两个字符串长度的差,即值为this.length() -anotherString.length()。
1 /* 2 3 TreeSet:它可以给Set集合中的元素进行指定方式的排序。 4 保证元素唯一性的方式:通过比较的结果是否为0. 5 底层数据结构是:二叉树。 6 */ 7 8 9 import java.util.*; 10 11 12 class TreeSetDemo2 13 { 14 public static void main(String[] args) 15 { 16 TreeSet ts = new TreeSet(); 17 18 ts.add(new Student("lisi0",30)); 19 ts.add(new Student("lisixx",29)); 20 ts.add(new Student("lisi9",29)); 21 ts.add(new Student("lisi8",38)); 22 ts.add(new Student("lisixx",29)); 23 ts.add(new Student("lisi4",14)); 24 //ts.add(new Student(39)); 25 ts.add(new Student("lisi7",27)); 26 27 System.out.println(ts); 28 } 29 } 30 31 //同姓名同年龄的学生视为同一个学生。按照学生的年龄排序。 32 class Student implements Comparable 33 { 34 private int age; 35 private String name; 36 Student(String name,int age) 37 { 38 this.age = age; 39 this.name = name; 40 } 41 42 public int compareTo(Object obj) 43 { 44 45 Student stu = (Student)obj; 46 47 int num = new Integer(this.age).compareTo(new Integer(stu.age)); 48 49 return num==0?this.name.compareTo(stu.name):num; 50 51 /* 52 if(this.age>stu.age) 53 return 1; 54 if(this.age==stu.age) 55 return this.name.compareTo(stu.name); 56 return -1; 57 */ 58 /**/ 59 } 60 61 public int getAge() 62 { 63 return age; 64 } 65 public String toString() 66 { 67 return name+"::"+age; 68 } 69 } 70
1 /* 2 3 TreeSet:它可以给Set集合中的元素进行指定方式的排序。 4 保证元素唯一性的方式:通过比较的结果是否为0. 5 底层数据结构是:二叉树。 6 7 排序的第一种方式: 8 让元素自身具备比较性。只要让元素实现Comparable接口,覆盖compareTo方法即可。 9 10 但是,如果元素自身不具备比较性,或者元素自身具备的比较性,不是所需要的。 11 比如,学生的自然排序是按年龄排序,现在想要按照学生姓名排序。还可以不改动原有代码。 12 这时怎么办呢? 13 排序的第二种方式:自定比较器的方式。 14 这时可以让集合自身具备比较性。 15 可以定义一个类实现Comparator接口,覆盖compare方法。将该Comparator接口子类对象作为实际参数 16 传递给TreeSet集合构造函数。 17 18 该对象就是比较器。 19 20 21 22 */ 23 24 25 import java.util.*; 26 27 28 class TreeSetDemo3 29 { 30 public static void main(String[] args) 31 { 32 TreeSet ts = new TreeSet(new StudentComparatorByName()); 33 34 ts.add(new Student("lisi0",30)); 35 ts.add(new Student("lisixx",29)); 36 ts.add(new Student("lisi9",29)); 37 ts.add(new Student("lisi8",38)); 38 ts.add(new Student("lisixx",29)); 39 ts.add(new Student("lisi4",14)); 40 //ts.add(new Student(39)); 41 ts.add(new Student("lisi7",27)); 42 43 44 45 System.out.println(ts); 46 } 47 } 48 49 class StudentComparatorByName implements Comparator 50 { 51 public int compare(Object o1,Object o2) 52 { 53 Student s1 = (Student)o1; 54 Student s2 = (Student)o2; 55 56 int num = s1.getName().compareTo(s2.getName()); 57 return num==0?new Integer(s1.getAge()).compareTo(new Integer(s2.getAge())):num; 58 } 59 } 60 61 62 //同姓名同年龄的学生视为同一个学生。按照学生的年龄排序。 63 class Student implements Comparable 64 { 65 private int age; 66 private String name; 67 Student(String name,int age) 68 { 69 this.age = age; 70 this.name = name; 71 } 72 73 public int compareTo(Object obj) 74 { 75 76 Student stu = (Student)obj; 77 78 int num = new Integer(this.age).compareTo(new Integer(stu.age)); 79 80 return num==0?this.name.compareTo(stu.name):num; 81 82 /* 83 if(this.age>stu.age) 84 return 1; 85 if(this.age==stu.age) 86 return this.name.compareTo(stu.name); 87 return -1; 88 */ 89 /**/ 90 } 91 92 public int getAge() 93 { 94 return age; 95 } 96 public String getName() 97 { 98 return name; 99 } 100 public String toString() 101 { 102 return name+"::"+age; 103 } 104 }
Integer 类型是一个对象,它也重写了compareTo()方法。直接调用就可以。
int 类型是基本数据类型,如果要比较直接减就可以。