Comparable 和 Comparator 都可以对一个List中的值进行排序
write by 开发老张
Comparable:
是一个接口,被比较类要实现 Comparable 接口
升序排列:当前值大于比较值返回 -1,相等返回0,小于返回 1
使用 Collections.sort(Object) 实现方法排序
Comparator:
单独定义的比较器,比较器类要实现 Comparator 接口
升序排列:第一个值大于第二个值返回 1,相等返回0,小于返回 -1
使用 Collections.sort(Object, Comparator) 实现方法排序
Comparable 例:
write by 开发老张
Comparable:
是一个接口,被比较类要实现 Comparable 接口
升序排列:当前值大于比较值返回 -1,相等返回0,小于返回 1
使用 Collections.sort(Object) 实现方法排序
Comparator:
单独定义的比较器,比较器类要实现 Comparator 接口
升序排列:第一个值大于第二个值返回 1,相等返回0,小于返回 -1
使用 Collections.sort(Object, Comparator) 实现方法排序
Comparable 例:
Person.java
package com.zsoft.test.comparable; public class Person implements Comparable<Person>{ private String name; private String sex; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Person(String name, String sex, int age) { super(); this.name = name; this.sex = sex; this.age = age; } @Override public String toString() { return "Person [name=" + name + ", sex=" + sex + ", age=" + age + "]"; } @Override public int compareTo(Person o) { if(o.getAge() > this.age){ return -1; } else if(o.getAge() == this.age){ return 0; } else { return 1; } } }
ComparableTest.java
package com.zsoft.test.comparable; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class ComparableTest { public static void main(String[] args) { Person a = new Person("aa", "男", 20); Person b = new Person("bb", "男", 30); Person c = new Person("cc", "女", 10); Person d = new Person("dd", "男", 22); Person e = new Person("ee", "女", 8); Person f = new Person("ff", "男", 19); List<Person> persons = new ArrayList<Person>(); persons.add(a); persons.add(b); persons.add(c); persons.add(d); persons.add(e); persons.add(f); Collections.sort(persons); for(Person p:persons){ System.out.println(p); } } }
运行 ComparableTest 输出:
Person [name=ee, sex=女, age=8]
Person [name=cc, sex=女, age=10]
Person [name=ff, sex=男, age=19]
Person [name=aa, sex=男, age=20]
Person [name=dd, sex=男, age=22]
Person [name=bb, sex=男, age=30]
Comparator 例:
Person.java
package com.zsoft.test.comparator; public class Person{ private String name; private String sex; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Person(String name, String sex, int age) { super(); this.name = name; this.sex = sex; this.age = age; } @Override public String toString() { return "Person [name=" + name + ", sex=" + sex + ", age=" + age + "]"; } }
PersonComparator.javapackage com.zsoft.test.comparator; import java.util.Comparator; public class PersonComparator implements Comparator<Person>{ @Override public int compare(Person o1, Person o2) { if(o1.getAge() > o2.getAge()){ return 1; } else if(o1.getAge() == o2.getAge()){ return 0; } else { return -1; } } }
ComparatorTest.java
package com.zsoft.test.comparator; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class ComparatorTest { public static void main(String[] args) { Person a = new Person("aa", "男", 20); Person b = new Person("bb", "男", 30); Person c = new Person("cc", "女", 10); Person d = new Person("dd", "男", 22); Person e = new Person("ee", "女", 8); Person f = new Person("ff", "男", 19); List<Person> persons = new ArrayList<Person>(); persons.add(a); persons.add(b); persons.add(c); persons.add(d); persons.add(e); persons.add(f); Collections.sort(persons, new PersonComparator()); for(Person p:persons){ System.out.println(p); } } }
运行 ComparatorTest 输出:
Person [name=ee, sex=女, age=8]
Person [name=cc, sex=女, age=10]
Person [name=ff, sex=男, age=19]
Person [name=aa, sex=男, age=20]
Person [name=dd, sex=男, age=22]
Person [name=bb, sex=男, age=30]