comparable接口的使用

 
  
package comparable; import java.util.Comparator; public class Student implements Comparable<Student> { public Integer age; public String name; public Student() {} public Student(Integer age,String name) { this.age=age; this.name=name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String toString() { return this.age+"----------------"+this.name; } /** * 1 实现comparable<Student>接口 * 2 实现接口的方法 * * **/ @Override public int compareTo(Student o) { //按照大学生的年龄排序年龄相等的情况下用那么排序。 // 1 按照年龄来比较student,如果年龄相等 // 2那么去返回name的比较结果。 // 3如果年龄不相等,那么返回年龄的比较值。 // 因为只有两个属性,两个属性不可能完全相等,因为集合里不能有重复的元素,所以 // 先比较年龄,年龄不行等,那么就按照年龄来排序,如果年龄相等,那么就按照年龄之外的其他属性来排序,就只有name了。 // 大概的实现步骤 // // 1 sort方法就是根据compara()方法的返回值进行排序的,具体是怎么实现的排序我也不清楚,comparable接口就只是实现了对比然后返回一个值的作用, // 返回值:a.comparableTo(b)==0; //意思是a==b //<0,意思是a<b //>0,意思是a>b // 真正起到排序作用的是array.sort,这个类中定义了排序规则,也可能是我们之前学的冒泡排序,也可能是我们之前学的其他排序算法,总之 // 这些算法很多复杂,这些算法根据compara()方法的返回值来确定哪些参数在前面,哪些参数在后面。 // 2 一个类实现comparable接口,然后在compara()方法里面定义排序规则,方法返回一个值, // 3然后array.sort调用这个类的实例的时候回去调用这个方法,根据这个方法的返回值去判断两个对象那个在前面,那个在后面 // // // // 接口存在的意义, //java里面电定义了一个排序的功能(array.sort方法),这个方法一定会调用comparato()方法,所以一定要规范化一个接口,让每一个想要排序的类都实现这个接口 //只有这样才能让每一个类都有排序的方法。 //array.sort和comparable接口是配套使用的,当排序的时候,肯定会调用comparable接口的方法,根据方法的返回值来对对象进行排序。 //这就是为什么要定义一个接口了,java把排序这个功能抽象出来,然后给方便我们自己给那些没有定义排序功能的类加上这个接口,只要加上这个接口,我们在调用 //array.sort的时候就会根据返回值来对对象进行排序。 //一些笔记 // 1 int 类型的数就是按照1,2,3,4,5,6这样的顺序去排序的, // 2 string类型就是按照 a,b,c这样的顺序去排序的 // int i=this.age.compareTo(o.age); // int k=this.name.compareTo(o.name); // // // if(i==0) { // return k; // }else { // return i; // } int x=this.age-o.age;//年龄可以直接相互加减,方法只需要有一个返回值就可以了,才不管你用的是什么途径。 int k=this.name.compareTo(o.name); if(x==0) { if(k<0) { return -1; //因为要求必须返回整数,不能直接返回k 的值,然后让array.sort进行判断,array只能对整数进行判断,万一返回值是个 // 带小数点的呢,那不就完蛋了 // 所以要对k的值进行翻译,如果是小于零的就用-1表示。 }else { return 1; } }else { if(x<0) { return -1; }else { return 1; } } } }
package comparable;
/**  * 1 创建一个学生类并且实现接口  * 2 创建一个测试类  *     。创建学生对象  *     。实例化容器  *     。将学生加入到容器中  * 3排序前打印一次  * 4对容器的元素排序  * 5再次打印一次  *  * **/
import java.util.ArrayList; import java.util.Collections; import java.util.List;
public class Studenttest {  public static List list1;        public static  void sortway() {   list1=new ArrayList<>();   Student s1=new Student(4,"yuan1");   Student s2=new Student(3,"yuan2");   Student s3=new Student(2,"yuan3");   Student s4=new Student(1,"yuan4");   list1.add(s1);   list1.add(s2);   list1.add(s3);   list1.add(s4);      System.out.println(list1);      Collections.sort(list1);      System.out.println(list1);     }    public static void main(String[] args) {   sortway();  }
}


猜你喜欢

转载自blog.csdn.net/qq_38296051/article/details/80478530