比较器Comparable、Comparator

Comparable接口的使用(自然排序)

1.String、包装类等实现了Comparable接口,重写了compareTo(obj)方法,给出了比较两个对象大小的方式. String、包装类重写了compareTo()方法以后,进行了从小到大的排序。

2.重写compareTo(obj)规则:

  如果当前对象this大于形参对象obj,则返回正整数。

  如果当前对象this小于形参对象obj,则返回负整数。

  如果当前对象this等于形参对象obj,则返回0

3.对于自定义类,如果需要排序,让自定义类实现Comparable接口,重写compareTo(obj)方法,在compareTo(obj)方法中指明如何排序。

public class Goods implements Comparable<Goods>{
    private String name;
    private double price;

    public Goods(String name, double price) {
        this.name = name;
        this.price = price;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    @Override
    public String toString() {
        return "Goods{" +
                "name='" + name + '\'' +
                ", price=" + price +
                '}';
    }

    //按照价格从低到高排序,再按照产品名称从高到底排序
    @Override
    public int compareTo(Goods o) {
        //方式一
        if(this.price>o.price){
            return 1;
        }else if(this.price<o.price){
            return -1;
        }else {
            //return 0;
      return -this.name.compareTo(o.name); } //方式二 //return Double.compare(this.price,o.price); } }

  

    @Test
    public void test1(){
        Goods[] arr = new Goods[4];
        arr[0] = new Goods("bbb",35);
        arr[1]= new Goods("eee",15);
        arr[2]= new Goods("ddd",55);
        arr[3]= new Goods("aaa",25);

        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr));
        //[Goods{name='eee', price=15.0}, Goods{name='aaa', price=25.0}, Goods{name='bbb', price=35.0}, Goods{name='ddd', price=55.0}]
    }

  

 Comparator定制排序

重写compare(Object o1,Object o2)方法,比较o1和o2的大小:

o1>o2:方法返回正整数。

o1<o2:方法返回负整数

o1=o2:方法返回0

可以将Comparator传递给sort方法,如Collections.sort或Arrays.sort,从而允许在排序顺序上实现精确控制。

public class ComparaTest {

    @Test
    public void test1(){
        Goods[] arr = new Goods[4];
        arr[0] = new Goods("bbb",35);
        arr[1]= new Goods("eee",15);
        arr[2]= new Goods("ddd",55);
        arr[3]= new Goods("aaa",25);

        //价格从高到底排序
        Arrays.sort(arr, new Comparator<Goods>() {
            @Override
            public int compare(Goods o1, Goods o2) {
                return -Double.compare(o1.getPrice(),o2.getPrice());
            }
        });

        System.out.println(Arrays.toString(arr));
    //[Goods{name='ddd', price=55.0}, Goods{name='bbb', price=35.0}, Goods{name='aaa', price=25.0}, Goods{name='eee', price=15.0}] } }

  

 

posted @ 2022-08-18 23:05  Mr_sven  阅读(23)  评论(0编辑  收藏  举报