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

比较器

Java语言中的比较器分为两种:

Comparable比较器:Comparable是排序接口;若一个类实现了Comparable接口,就意味着“该类支持排序”。(作用在实体类上)同时也被称之为:内部比较器。

Comparator比较器:我们若需要控制某个类的次序,可以建立一个“该类的比较器”来进行排序。(作用在排序类上)同时也被称之为:外部比较器。

案例 1 内部比较器:

先创建一个类:

public class House implements Comparable{

//房子的面积及总价

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 {

@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

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!


版权声明:本文为weixin_30864831原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。