站稳马步——(3)java比较器——Comparable和Comparator

java排序——java比较器——Comparable和Comparator

 

一。关键字:

     Comparator、Comparable、Collections.sort()、Arrays.sort()


二。需求:

      现在给学生排序,排序规则是:先按身高排;如果身高相同,再按年龄排;如果年龄相同,再按性别排;如果。。。    


三。需求例子:

      方法1:使用java.lang.Comparable接口

      class Student implements Comparable<Student>{ String name; byte sex; int age; Student(String name,byte sex,int age){ this.name=name; this.sex=sex; this.age=age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public byte getSex() { return sex; } public void setSex(byte sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int compareTo(Student s) { // TODO Auto-generated method stub if(this.age!=s.age){ return (this.age>s.age?1:-1); }else if(this.sex!=s.sex){ return (this.age>s.sex?1:-1); }else{ return this.name.compareTo(s.name); } } public String toString(){ return "Name:"+name+" Sex:"+sex+" Age:"+age; } }

      测试类:

      /** * *@author: ydj *@createTime: Nov 1, 2010 2:04:12 PM * */ public class TestComparator { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub List<Student> list=new ArrayList<Student>(); Student s1=new Student("A",(byte)1,20); Student s2=new Student("D",(byte)0,22); Student s3=new Student("A",(byte)0,18); Student s4=new Student("B",(byte)1,15); Student s5=new Student("C",(byte)0,15); Student s6=new Student("E",(byte)0,15); Student s7=new Student("A",(byte)0,15); list.add(s1); list.add(s2); list.add(s3); list.add(s4); list.add(s5); list.add(s6); list.add(s7); System.out.println("###########排序前###########"); for(Student s:list){ System.out.println(s.toString()); } Collections.sort(list);//方法一 //Collections.sort(list, new MyComparator());//方法二 System.out.println("###########排序后###########"); for(Student s:list){ System.out.println(s.toString()); } } private static class MyComparator implements Comparator<Object>{ public int compare(final Object o1, final Object o2) { // TODO Auto-generated method stub final Student s1=(Student)o1; final Student s2=(Student)o2; if(s1.age!=s2.age){ return (s1.age>s2.age?1:-1); }else if(s1.sex!=s2.sex){ return (s1.age>s2.sex?1:-1); }else{ return s1.name.compareTo(s2.name); } } } }

     运行结果:

     ###########排序前########### Name:A Sex:1 Age:20 Name:D Sex:0 Age:22 Name:A Sex:0 Age:18 Name:B Sex:1 Age:15 Name:C Sex:0 Age:15 Name:E Sex:0 Age:15 Name:A Sex:0 Age:15 ###########排序后########### Name:A Sex:0 Age:15 Name:C Sex:0 Age:15 Name:E Sex:0 Age:15 Name:B Sex:1 Age:15 Name:A Sex:0 Age:18 Name:A Sex:1 Age:20 Name:D Sex:0 Age:22

 

    方法2:使用java.util.Comparator接口

              如果,Student没有实现Comparable接口(时而我们要直接引用别人写的类,并且我们不可以修改),怎么办?那么我们就使用上面测试代码中的方法二:Collections.sort(list, new MyComparator()); 自己实现一个内部类(或匿名类)。

 

 

四。分析总结:

       1.集合框架使用Collections.sort()排序;Comparator更灵活;

       2.数组使用Arrays.sort() 排序

    



 

你可能感兴趣的:(java,String,list,object,Class,byte)