黑马程序员------比较器

比较器(Comparable、Comparator)
  Comparable
  实现Comparable接口的类,使其本身具有比较性
使用java.util.Arrays类进行数组的排序操作的对象必须实现Comparable接口。
Comparable接口的定义:
public interface Comparable<T>{
        public int compareTo(T o);
}
此方法返回一个int类型的数据,但是此int的值只能是一下三种:
1:表示大于
-1:表示小于
0:表示相等
按学生分数由高到低排序,分数相等的,年龄大的在前边。
public class Student implements Comparable<Student>{
private String name;
private float score;
private int age;
public Student(String name,int age, float score){
this.name=name;
this.age=age;
this.score=score;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float getScore() {
return score;
}
public void setScore(float score) {
this.score = score;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String toString(){
return this.name+"--"+this.age+"--"+this.score;
}
@Override
public int compareTo(Student s){
if(this.score>s.score){
return -1;
}else if(this.score<s.score){
return 1;
}else{
if(this.age>s.age){
return -1;
}else if(this.age<s.age){
return 1;
}else{
return 0;
}
}
}
public static void main(String[] args) {
List<Student> list=new ArrayList<Student>();
list.add(new Student("zhangsan",20,33f));
list.add(new Student("lisi",19,22f));
list.add(new Student("wangwu",22,99f));
list.add(new Student("sunzi",20,99f));
Collections.sort(list);
for(Student s:list){
System.out.println(s.toString());
}
}
}
Comparator
自定义比较器,比较的对象本身不具有比较性
接口定义:
public interface Comparator<T>{
                 public  int  compare(T o1,T o2);
                 boolean  equals(Object  obj);
}
public class Student {//implements Comparable<Student>{
private String name;
private float score;
private int age;
public Student(String name,int age, float score){
this.name=name;
this.age=age;
this.score=score;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float getScore() {
return score;
}
public void setScore(float score) {
this.score = score;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String toString(){
return this.name+"--"+this.age+"--"+this.score;
}
public static void main(String[] args) {
List<Student> list=new ArrayList<Student>();
list.add(new Student("zhangsan",20,33f));
list.add(new Student("lisi",19,22f));
list.add(new Student("wangwu",22,99f));
list.add(new Student("sunzi",20,99f));
Collections.sort(list, new MyComparator());
for(Student s:list){
System.out.println(s.toString());
}
}
}
class MyComparator implements Comparator<Student>{
@Override
public int compare(Student s1, Student s2) {
if(s1.getScore()>s2.getScore()){
return -1;
}else if(s1.getScore()<s2.getScore()){
return 1;
}else{
if(s1.getAge()>s2.getAge()){
return -1;
}else if(s1.getAge()<s2.getAge()){
return 1;
}else{
return 0;
}
}
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值