对两个或多个数据项进行比较,以确定它们是否相等,或确定它们之间的大小关系及排列顺序称为比较。
前面学过Arrays.sort方法可实现对象的排序操作:
public static void sort(Object[] a)
Comparable接口:
此接口强行对实现它的每个类的对象进行整体排序。这种排序称为类的自然排序,类的compareTo方法被称为它的自然比较方法。
Comparator接口:
此接口是要求自定义类去实现,按照oo原则:对修改关闭,对扩展开放。
那么如果这个类已经定义好了,不想再去修改它,那如何实现比较呢?
Comparator接口: 强行对某个对象collection进行整体排序的比较。
对象数组排序,对象数组要先实现Comparable或Comparator接口,实现compareTo方法自定义比较规则,才能进行对象排序。
1、直接实现Comparable接口,在当前类实现compareTo方法自定义比较规则
2、不修改当前类,重新创建一个类实现Comparator接口实现对象排序
实例代码:
主类:
package com.booy1;
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
int[] nums = {76,45,42,67,32,13,54,9,15};
//整型数组排序
Arrays.sort(nums);
System.out.println(Arrays.toString(nums));
//字符串数组排序
String[] name = {"jack","booy","tom","飞飞","小明","丽丽"};
Arrays.sort(name);
System.out.println(Arrays.toString(name));
//对象数组排序,对象数组要先实现Comparable或Comparator接口,实现compareTo方法自定义比较规则,才能进行对象排序
Cat[] cat = {new Cat("萌萌",4),new Cat("大熊",10),new Cat("圈圈",8)};
Arrays.sort(cat);
System.out.println(Arrays.toString(cat));
//Comparator
Dog[] dog = {new Dog("呆哥",6),new Dog("肉肉",3),new Dog("阿布",8)};
Arrays.sort(dog,new DogComparator());
System.out.println(Arrays.toString(dog));
}
/**
运行结果:
[9, 13, 15, 32, 42, 45, 54, 67, 76]
[booy, jack, tom, 丽丽, 小明, 飞飞]
[Cat [name=萌萌, age=4], Cat [name=圈圈, age=8], Cat [name=大熊, age=10]]
[Cat [name=肉肉, age=3], Cat [name=呆哥, age=6], Cat [name=阿布, age=8]]
*/
}
Cat类:
package com.booy1;
public class Cat implements Comparable<Cat> {
private String name;
private int age;
public Cat() {
super();
}
public Cat(String name, int age) {
super();
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;
}
@Override
public String toString() {
return "Cat [name=" + name + ", age=" + age + "]";
}
@Override
public int compareTo(Cat o) {
// if(this.age>o.age)return -1;
// if(this.age<o.age)return 1;
// return 0;
return this.age-o.age;
}
}
Dog类:
package com.booy1;
public class Dog{
private String name;
private int age;
public Dog() {
super();
}
public Dog(String name, int age) {
super();
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;
}
@Override
public String toString() {
return "Cat [name=" + name + ", age=" + age + "]";
}
}
DogComparator类:
package com.booy1;
import java.util.Comparator;
public class DogComparator implements Comparator<Dog> {
@Override
public int compare(Dog o1, Dog o2) {
return o1.getAge()-o2.getAge();
}
}