Comparable 是提供一定排序的接口,而Comparator接口通过我们的自定义来比较。
所以Comparable希望提供自然顺序的类,接口中的一个方法 int compareTo(object o)
比较当前对象,在对象之后返回正值;
而Comparator接口定义了两个方法 int compare(Object 01,Object o2),
o1位于o2后面返回正值,大于0表示要交换位置,大的在后面,boolean equals(object o) 比较相等
public class TestComparator {
public static void main(String[] args) {
List<Person2> list = new ArrayList<Person2>();
list.add(new Person2("张三", 50,"男",500.00));
list.add(new Person2("李四", 27,"女",800.00));
list.add(new Person2("王五", 33,"男",500.00));
list.add(new Person2("赵六", 33,"男",1000.00));
list.add(new Person2("付8", 33,"男",500.00));
for (Person2 p : list) {
System.out.println(p);
}
System.out.println("---------Comparator比较----------");
Collections.sort(list, new Comparator<Person2>() {
@Override
public int compare(Person2 o1, Person2 o2) {
int ageCompare = o1.getAge()-o2.getAge();
if(ageCompare == 0){
int salaryCompare = (o1.getSalary()-o2.getSalary()>0.001?1:-1);
return salaryCompare;
}
return ageCompare;
}
});
for (Person2 p : list) {
System.out.println(p);
}
}
}
class Person2 {
private String name;
private int age;
private String sex;
private double salary;
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;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public Person2(String name, int age, String sex, double salary) {
super();
this.name = name;
this.age = age;
this.sex = sex;
this.salary = salary;
}
public Person2() {
super();
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", sex=" + sex
+ ", salary=" + salary + "]";
}
}
public class TestComparable {
public static void main(String[] args) {
List<Person> list = new ArrayList<Person>();
list.add(new Person("张三", 50,"男",500.00));
list.add(new Person("李四", 27,"女",800.00));
list.add(new Person("王五", 33,"男",500.00));
list.add(new Person("赵六", 33,"男",1000.00));
list.add(new Person("付8", 33,"男",500.00));
for (Person p : list) {
System.out.println(p);
}
System.out.println("--------Comparable比较----------");
Collections.sort(list);
for (Person p : list) {
System.out.println(p);
}
}
}
class Person implements Comparable<Person>{
private String name;
private int age;
private String sex;
private double salary;
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;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public Person(String name, int age, String sex,double salary) {
super();
this.name = name;
this.age = age;
this.sex = sex;
this.salary = salary;
}
public Person() {
super();
}
@Override
public int compareTo(Person o) {
int ageCompare = this.age - o.age;
if(ageCompare==0){ //年龄相同 用工资排
int salaryCompare = (this.salary - o.salary)>0.00?-1:1; //工资如果再相同就不管了
System.out.println(salaryCompare);
return salaryCompare;
}
return ageCompare;
//return o.age -this.age;
//this.compareTo(o.age);
//this.getAge().compareTo(o.getAge());
//this.name.compareTo(anotherString)
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", sex=" + sex
+ ", salary=" + salary + "]";
}
}
————————————————
版权声明:本文为CSDN博主「fu_jian_feng」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u011877584/article/details/81156092