比较器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)方法中指明如何排序。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
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;<br>      return -this.name.compareTo(o.name);
        }
        //方式二
        //return Double.compare(this.price,o.price);
    }
}

  

1
2
3
4
5
6
7
8
9
10
11
12
@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,从而允许在排序顺序上实现精确控制。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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));<br>    //[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 @   iTao0128  阅读(53)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示