java 中的比较器(Comparator)

import java.util.Arrays; import java.util.Comparator; class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return this.name; } public int getAge() { return this.age; } @Override public String toString() { // TODO Auto-generated method stub return ""+this.name+" "+this.age; } } class Cmp implements Comparator { @Override public int compare(Object arg0, Object arg1) { Person a = (Person) arg0; Person b = (Person) arg1; if (a.getName().compareTo(b.getName()) != 0) return a.getName().compareTo(b.getName()); else { if (a.getAge() < b.getAge()) return -1; else if (a.getAge() > b.getAge()) return 1; else return 0; } } } public class Main { public static void main(String[] args) { Person[] p = new Person[4]; p[0] = new Person("ZZZ",19); p[1] = new Person("AAA", 109); p[2] = new Person("AAA", 19); p[3] = new Person("YYY",100); Arrays.sort(p, new Cmp()); System.out.println(Arrays.toString(p)); } }

当然由于比较器的实现类只用显示实现一个方法,因此,我们可以不用专门写一个类来实现它,当我们需要用到比较器时,可以写个匿名内部类来实现 Comparator

import java.util.Arrays; import java.util.Comparator; class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return this.name; } public int getAge() { return this.age; } @Override public String toString() { return ""+this.name+" "+this.age; } } public class Main { public static void main(String[] args) { Person[] p = new Person[4]; p[0] = new Person("ZZZ",19); p[1] = new Person("AAA", 109); p[2] = new Person("AAA", 19); p[3] = new Person("YYY",100); Arrays.sort(p, new Comparator<Object>() { @Override public int compare(Object arg0, Object arg1) { Person a = (Person) arg0; Person b = (Person) arg1; if (a.getName().compareTo(b.getName()) != 0) return a.getName().compareTo(b.getName()); else { if (a.getAge() < b.getAge()) return -1; else if (a.getAge() > b.getAge()) return 1; else return 0; } } }); System.out.println(Arrays.toString(p)); } }

之前一直用的是 Comparable接口,下午把比较器学了下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值