常用类19-Java比较器之Comparable(自然排序)

解决的问题:

Java中的对象,正常情况下,只能进行比较:==或!=,不能使用>或<

但在实际开发中,需要对多个对象进行排序,比较对象大小,所以出现了Compareable活Compator

Comparable使用

1、String,包装类等实现了Comparable接口,重写了compareTo()方法,给出了比较两个对象大小的方法

2、compareTo()是默认从小到大排序的。

3、重写compareTo(obj)的规则:

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

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

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

4、对于自定义类来说,如果需要排序,可以让自定义类实现Comparable接口,重写compareTo(obj)方法,在compareTo(obj)写想要排序的方法


代码示例

类:

public class Goodsimplements Comparable{

    private Stringname;

    private double 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;

    }

    public Goods(String name,double price) {

        this.name = name;

        this.price = price;

    }

    public Goods() {

        }

    @Override

    public String toString() {

        return "Goods{" +

        "name='" +name +'\'' +

        ", price=" +price +

        '}';

        }

@Override

    //按照价格从高到低排序,价格相同,按名字排序

    public int compareTo(Object o) {

        if(oinstanceof Goods){

        Goods goods = (Goods)o;

        //方式1:自己写

            if(this.price > goods.price){

                return 1;

            }else if(this.price < goods.price){

                return -1;

            }else {

                return this.name.compareTo(goods.name);

    }

//方式2:

//            return Double.compare(this.price, goods.price);

        }

    throw new RuntimeException("传入的数据类型不一致");

    }

}

测试类:

public class CompareTest {

@Test

    public void test1(){

    String[] arr =new String[]{"AA","DD","KK","ZZ","MM","BB","EE","OO"};

    Arrays.sort(arr);

    System.out.println(Arrays.toString(arr));

    }

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容