4、对象比较器
对两个或多个数据项进行比较,以确定它们之间的大小关系及排列顺序称为比较,,前面我学习过Arrays.sort方法可实现对象的排列操作;
public static void sort(Object[] a);
(1)Comparable接口:
此接口强行对实现它的每个类的对象进行整体排序,这种排序被称为类的自然排序,类的compare To方法被称为它的自然比较方法。
import java.util.Arrays;
public class ComparableDome {
public static void main(String[] args) {
int[] nums= {23,45,3,56,};
Arrays.sort(nums);
System.out.println(Arrays.toString(nums));
String[] name= {"峰峰","tom","佳佳"};
Arrays.sort(name);
System.out.println(Arrays.toString(name));
Cat[] cats= {new Cat("峰峰",7),new Cat("tom",4),new Cat("佳佳",3)};
Arrays.sort(cats);
System.out.println(Arrays.toString(cats));
}
}
//自定义对象,要实现比较排序
//* 1、可以实现Comparable的ComparableTo方法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 "cats [name=" + name + ", age=" + age + "]";
}
@Override
public int compareTo(Cat o) {
// TODO Auto-generated method stub
return this.age-o.age;
}
}
(2)Comparator接口:
Comparator接口低要求自定义类去实现,按照oo原则,对修改关闭,对扩展开放。那么如果这个类已经定义好了,不想在修改它,那么如何实现比较呢
Comparator接口,强行对某个对象collection进行整体排序的比较
public class Dog {
private String name;
private int age;
public Dog() {
super();
// TODO Auto-generated constructor stub
}
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 "Dog [name=" + name + ", age=" + age + "]";
}
}
import java.util.Comparator;
public class DogComparator implements Comparator<Dog>{
@Override
public int compare(Dog o1, Dog o2) {
// TODO Auto-generated method stub
return o1.getAge()-o2.getAge();
}
}
Dog[] dogs= {new Dog("峰峰",7),new Dog("tom",4),new Dog("佳佳",3)};
Arrays.sort(dogs,new DogComparator());
System.out.println(Arrays.toString(dogs));
[3, 23, 45, 56]
[tom, 佳佳, 峰峰]
[cats [name=佳佳, age=3], cats [name=tom, age=4], cats [name=峰峰, age=7]]
[Dog [name=佳佳, age=3], Dog [name=tom, age=4], Dog [name=峰峰, age=7]]