JAVA中,Comparator 和 Comparable 比较器

1.Comparable是排序接口;若一个类实现了Comparable接口,就意味着“该类支持排序”。
(作用在实体类上)

编写实体类

//实现Comparable接口,泛型为House类
public class House implements Comparable<House> {
    private double area;//面积
    private double money;//房价

	//重写Comparable的方法
    @Override
    public int compareTo(House o) {
    	//因为返回值是int类型,而参与比较的房价为double类型,
    	//所以要用Double包装类比较,返回的是一个int类型
        return Double.compare(this.money,o.money);
    }

	//重写toString方法,用来打印
    @Override
    public String toString() {
        return "House{" +
                "area=" + area +
                ", money=" + money +
                '}';
    }

    public House() {
    }

    public House(double area, double money) {
        this.area = area;
        this.money = money;
    }
    }

编写测试类

public class TestHouse {
    public static void main(String[] args) {
       //初始化数据
        House[] houses ={
                new House(80,90),
                new House(100,200),
                new House(60,150),
                new House(110,120),
                new House(90,100),
                new House(70,190)
        };
        //对对象数组进行排序,sort排序会自动调用 public int compareTo(House o)方法比较
        Arrays.sort(houses);
        //调用重写的toString方法,进行打印
        System.out.println(Arrays.toString(houses));


    }
}

运行效果图
在这里插入图片描述

2.而Comparator是比较器;我们若需要控制某个类的次序,可以建立一个“该类的比较器”来进行排序。
(作用在排序类上)。

实体类狗

public class Dog {
    private String name;//狗名
    private int age;//年龄

	//重写toString方法方便打印
    @Override
    public String toString() {
        return "Dog{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public Dog() {
    }

    public Dog(String name, int age) {
        this.name = name;
        this.age = age;
    }
    }

编写Comparator比较器

//实现Comparator接口,泛型为Dog
public class TorDog implements Comparator<Dog> {
    //重写compare方法
    @Override
    public int compare(Dog o1, Dog o2) {
    //比较狗名字符串的大小
        return o1.getName().compareTo(o2.getName());
    }
}

测试类

public class TestDog {
    public static void main(String[] args) {
    //初始化数据
        Dog[] dogs = {
                new Dog("旺财",2),
                new Dog("来福",5),
                new Dog("大黄",3),
                new Dog("小黑",4),
                new Dog("哮天犬",6)
        };
        //升序排列
        char a ='啸',b='大';
        //打印字符所对应的十进制数
        System.out.println((int)a);
        System.out.println((int)b);
        //传值比较
        Arrays.sort(dogs,new TorDog());
        System.out.println(Arrays.toString(dogs));
    }
}

运行效果
在这里插入图片描述

总结:Comparable相当于“内部比较器”,而Comparator相当于“外部比较器”。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值