java中有两种比较器 : Comparable & Comparator
1.Comparable
/* 1.Comparable的使用: 实现Comparable接口 , 重写CompareTo(Obj)方法 2.举例 : String , 包装类等 , 都重写了CompareTo()方法 3.重写CompareTo(Obj)的规则 : 如果当前对象this大于形参Obj,则返回正整数 , 反之 , 返回负整数, 若this等于Obj等返回0; 4.在自定义类重写CompareTo()方法,指明如何排序 */ import java.util.Arrays; public class Comparable { public static void main(String[] args) { Person[] p = new Person[3]; p[0]=new Person(13); p[1]=new Person(6); p[2]=new Person(9); Arrays.sort(p); System.out.println(Arrays.toString(p)); } }
public class Person implements java.lang.Comparable { int age; public Person(int age) { this.age = age; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Person{" + "age=" + age + '}'; } @Override public int compareTo(Object o) { if (o instanceof Person){ Person p =(Person) o; //方式一 : if (this.age > p.age){ return 1; }else if (this.age < p.age){ return -1; }else{ // return 0; //如果有第二种比较方式 按name排序 //return this.namecompareTo(p.name);(正序) //return -this.namecompareTo(p.name);(倒序) } //方式二 // return Double.compare(this.age,p.age); } throw new RuntimeException("输入的类型不一致!"); } }
2.Comparator
//自定义比较器 public class ComparatorTest { @Test public void test1(){ String[] str = new String[]{"AA","CC","KK","MM","GG","JJ","DD"}; Arrays.sort(str); System.out.println(Arrays.toString(str)); } @Test public void test2(){ String[] str = new String[]{"AA","CC","KK","MM","GG","JJ","DD"}; Arrays.sort(str, new Comparator<String>() { @Override public int compare(String o1, String o2) { if (o1 instanceof String && o2 instanceof String){ String s1 = (String)o1; String s2 = (String)o2; //return s1.compareTo(s2);正序 return -s1.compareTo(s2);//倒序 } throw new RuntimeException("输入的类型不一致!"); } }); System.out.println(Arrays.toString(str));//[MM, KK, JJ, GG, DD, CC, AA] } }