java比较器

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]
    }
}
原文地址:https://www.cnblogs.com/Anonymity-zhang/p/14362396.html