Java 比较器

面试题:请解释Comparable和Comparator的区别?(或 请解释两种比较器的区别?)

1:如果对象数组要进行排序,那么必须设置排序规则,可以使用Comparable和Comparator接口实现;
2:是在一个类定义的时候实现好的接口,这样本类的对象数组就可以进行排序,在Comparable实现compareTo(Object o)方法;
3:是专门定义一个指定类的比较规则,属于挽救的比较操作,在Comparator实现compare(Object o1, Object o2)方法;

可以用代码学习:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class CompareTest {

/**
 * @param args
 */
public static void main(String[] args) {
    List<Student> list = new ArrayList<Student>(10);
    list.add(new Student(1, "jj"));
    list.add(new Student(0, "ww"));
    list.add(new Student(0, "kk"));
    list.add(new Student(2, "ll"));
    Collections.sort(list); //内部比较器:要排序的对象实现Comparable接口,可以对自身进行比较
    System.out.println(list);


    List<Teacher> t = new ArrayList<Teacher>(10);
    t.add(new Teacher(1, 12));
    t.add(new Teacher(0, 13));
    t.add(new Teacher(0, 14));
    t.add(new Teacher(2, 15));
    Collections.sort(t, new StudentComparator());//外部比较器:通过实现Comparator接口
    System.out.println(t);
}
}

public class Student implements Comparable{
   int num;
   String name;

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

@Override
public String toString() {
    return "\r\tnum:"+num+"name:"+name+"\r";
}

@Override
public int compareTo(Object o) {
    Student tmp = (Student)o;
    int  result = tmp.num > num ? 1 : (tmp.num == num ? 0 : -1);
    if (result == 0) {
        result = tmp.name.indexOf(0)>name.indexOf(0)?1:-1;
    }
    return result;
}
}

public class Teacher {

int num;
double salary;

public Teacher(int i, double j) {
    this.num = i;
    this.salary = j;
}

@Override
public String toString() {
    return "\r\tnum:"+num+"salary:"+salary+"\r";
}
 }

public class StudentComparator implements Comparator{

@Override
public int compare(Object o1, Object o2) {
    Teacher t1 = (Teacher) o1;
    Teacher t2 = (Teacher) o2;
    int result = t1.num > t2.num ? 1 : (t1.num == t2.num ? 0 : -1);
    return result = result == 0 ? (t1.salary<t2.salary ? 1: -1):result;
}
}
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值