A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨浩 中级黑马   /  2013-1-28 01:03  /  1658 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨浩 于 2013-1-28 16:36 编辑

如果要创建自定义的Comparator比较器,那么内部的比较代码怎么设计合理呢?
  1. @Override
  2.         public int compare(Object o1, Object o2) {
  3.         }
复制代码
为了让他们具备自动排序的能力,那么是不是简单的加减其实就可以了?
比如让传入的学生对象,可以按照成绩排序,那么只要让学生的成绩相减然后返回,这样可以么?
因为有可能学生成绩相等的,那么有没有必要再加入名称的排序
得到的效果就是:如果成绩相等,就按照姓名排序!

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

1 个回复

倒序浏览
本帖最后由 黑马张英涛 于 2013-1-28 10:15 编辑

相减是可以的。两个元素比较只有大于、小于、等于三种关系。而在compare方法里则是通过分别返回
正数、负数、0来表示这种关系。用相减的方法能表现出这种关系,但是条件是比较的元素必须支持减法操作。
一个简单的例子:

public class MyTest {

        /**
         *
         * @param args
         */

        public static void main(String[] args) {
               
                Student s1=new Student("abc",77);
                Student s2=new Student("bdc",65);
                Student s3=new Student("abe",65);
                Student s4=new Student("cac",90);

                List<Student> list=new ArrayList<Student>();
                list.add(s1);
                list.add(s2);
                list.add(s3);
                list.add(s4);
                for(Student s : list){
                        System.out.println(s.name+":"+s.score);
                }
                System.out.println("=============================");
                Collections.sort(list, new MyComparator());        //按照比较器指定的方式排序
                for(Student s : list){
                        System.out.println(s.name+":"+s.score);
                }
               
        }

}
class Student {
        public String name;
        public int score;
        
        public Student(String name,int score){
                this.name=name;
                this.score=score;
        }

}
class MyComparator implements Comparator<Student>{

        @Override
        public int compare(Student o1, Student o2) {
                if(o1.score==o2.score)        //如果分数相等就按照名字比较的反序
                        return -o1.name.compareTo(o2.name);               
                else
                        return o2.score-o1.score; //按照分数大小的反序比较
        }        
}

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马