日期:2014-05-20  浏览次数:20623 次

面向对象的问题
前几天去oracle面试,考官出了这样一个题:
student类有id,name,score三个属性,现在又许多student实例,问:实现对student的name,score的排序(包括升序和降序两种)。
我是这样写的,我写了4个comparator(分别是按name升序、按name降序,按score升序,按score降序),他们都实现Comparator接口,并且我自己仿照Arrays.sort(Object[] a)写了自己的快排算法,实现了考官的功能,但是考官说加入我让你也对id排序,那么你还新建两个comparator吗?当时我就不会了。。。。
大家能不能利用面向对象的思想设计一下这个排序,达到代码的复用,不论按照哪个属性排序都不会新建类,或者说不论排序需求是不变化是否增加都不用再创建新的comparator,给个设计方案就好

------解决方案--------------------
大概这么写吧。
Java code

public class StudentComparator implements Comparator<Student> {
    private String property;
    
    private int order;
    
    public StudentComparator(String property, int order) {
        this.property = property;
        this.order = order;
    }

    @Override
    public int compare(Student o1, Student o2) {
        // TODO: 根据property得到比较的属性,order得到顺序还是逆序。
        return 0;
    }
}

------解决方案--------------------
实现一个Comparator,假定类名为C
C.setOrderingProperty(),设置排序用的属性名
C.setOrderingDirection(),设置升序还是降序排序
C.Compare(O1,O2),根据设置的属性名,通过反射取O1,O2的相应属性,并且区分其是数字还是字符串,根据之前设置的升降序进行比较




------解决方案--------------------
不知道行不行?
http://blog.csdn.net/e437032193/article/details/6625849