欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java中的比较器:自定义规则!!!

程序员文章站 2022-03-19 16:05:29
比较器Java语言中的比较器分为两种:Comparable比较器:Comparable是排序接口;若一个类实现了Comparable接口,就意味着“该类支持排序”。(作用在实体类上)同时也被称之为:内部比较器。Comparator比较器:我们若需要控制某个类的次序,可以建立一个“该类的比较器”来进行排序。(作用在排序类上)同时也被称之为:外部比较器。案例 1 内部比较器:先创建一个类:public class House implements Comparable{...

比较器

Java语言中的比较器分为两种:
Comparable比较器:Comparable是排序接口;若一个类实现了Comparable接口,就意味着“该类支持排序”。(作用在实体类上)同时也被称之为:内部比较器
Comparator比较器:我们若需要控制某个类的次序,可以建立一个“该类的比较器”来进行排序。(作用在排序类上)同时也被称之为:外部比较器
案例 1 内部比较器:
先创建一个类:

public class House implements Comparable<House>{

    //房子的面积及总价
    private int area;
    private int money;
    public House() {
    }

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

    @Override//自定义比较规则:按照面积比大小 (负数 0 正数)
    public int compareTo(House o) {
        return this.getArea()-o.getArea();
    }
    
    @Override
    public String toString() {
        return "House{" +
                "area=" + area +
                ", money=" + money +
                '}';
    }

    public int getArea() {
        return area;
    }

    public void setArea(int area) {
        this.area = area;
    }

    public int getMoney() {
        return money;
    }

    public void setMoney(int money) {
        this.money = money;
    }


}

创建测试类:

public class TestHouse {

    public static void main(String[] args) {

        House h1 = new House(90, 1000000);
        House h2 = new House(100, 1500000);
        House h3 = new House(50, 500000);
        House h4 = new House(80, 2000000);
        House h5 = new House(70, 1600000);

        House[] houses={h1,h2,h3,h4,h5};
        System.out.println("排序前!");
        System.out.println(Arrays.toString(houses));
        System.out.println("排序后!");
        //给对象排序时,需要实体类实现 Comparable 接口,才可以实现排序
        Arrays.sort(houses);
        System.out.println(Arrays.toString(houses));
    }

}

输出的结构为:
排序前!
[ 面积=90 价格=1000000 , 面积=100 价格=1500000 , 面积=50 价格=500000 , 面积=80 价格=2000000 , 面积=70 价格=1600000 ]
排序后!
[ 面积=50 价格=500000 , 面积=70 价格=1600000 , 面积=80 价格=2000000 , 面积=90 价格=1000000 , 面积=100 价格=1500000 ]

因此可以看出排序依据按照我们定义的规则完成!!!

案例 2 外部比较器:
先创建一个任意类来进行我们的操作:

public class Dog {

    private String name;
    private int age;

    @Override
    public String toString() {
        return
                "名字=" + name +
                "年龄=" + age;
    }

    public Dog() {
    }

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

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }


}

再创建一个外部比较器类继承 Comparator 接口并写 compare 方法:

public class CompareDog implements Comparator<Dog> {
    @Override
    public int compare(Dog o1, Dog o2) {
        //return o1.getAge()-o2.getAge();根据年龄排序
        //把每个字符变成int类型后再进行比较
        return o1.getName().compareTo(o2.getName());//根据名字排序
    }

}

最后创建测试类测试:

public class TestDog {
    public static void main(String[] args) {

        Dog[]dogs={
                    new Dog("菲菲",5),
                    new Dog("前前",9),
                    new Dog("嘿嘿",1),
                    new Dog("蕾蕾",6),
                    new Dog("牛牛",4)
        };
        System.out.println("排序前:");
        System.out.println(Arrays.toString(dogs));

        System.out.println("排序后:");
        Arrays.sort(dogs,new CompareDog());
        System.out.println(Arrays.toString(dogs));

    }
}

运行结果为:
排序前:
[ 名字=菲菲 年龄=5 , 名字=前前 年龄=9 , 名字=嘿嘿 年龄=1 , 名字=蕾蕾 年龄=6 , 名字=牛牛 年龄=4 ]
排序后:
[ 名字=嘿嘿 年龄=1 , 名字=牛牛 年龄=4 , 名字=菲菲 年龄=5 , 名字=蕾蕾 年龄=6 , 名字=前前 年龄=9 ]
因此可以看出排序依据按照我们定义的规则完成!!!
当然名字也可以排序,按照汉字的排序规则排序!

本文地址:https://blog.csdn.net/DSM781314056/article/details/111997739

相关标签: java