一、使用方法
(1)目标对象(省略get、set、toString方法):
public class Person implements Comparable<Person> {
private String name;
private Integer age;
private Integer height;
public Person(String name, Integer age, Integer height) {
this.name = name;
this.age = age;
this.height = height;
}
//按照 年龄 、身高 、姓名从小到大排序
@Override
public int compareTo(Person o) {
int s = this.age.compareTo(o.age);
if(s != 0){
return s;
}
s = this.height.compareTo(o.height);
if(s != 0){
return s;
}
boolean equals = this.name.equals(o.name);
if(equals){
return 0;
}
return -1;
}
}
(2)测试类:
import java.util.*;
public class Client {
public static void main(String[] args) {
Person person = new Person("b", 19, 175);
Person person1 = new Person("z", 35, 180);
Person person2 = new Person("a",20,177);
Person person3 = new Person("k", 35, 181);
Person person4 = new Person("s",20,177);
Person person5 = new Person("s",20,177);
ArrayList<Person> objects = new ArrayList<>();
objects.add(person);
objects.add(person1);
objects.add(person2);
objects.add(person3);
objects.add(person4);
objects.add(person5);
Collections.sort(objects);
for (int i=0;i<objects.size();i++){
System.out.println("List集合使用for循环遍历");
System.out.println(objects.get(i));
}
System.out.println("使用iterator遍历List");
Iterator<Person> iterator = objects.iterator();
while(iterator.hasNext()){
Person next = iterator.next();
System.out.println(next);
}
//=====================Compareator=====================
//按照身高从大到小排序
Collections.sort(objects, new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
if(o1.getHeight()>o2.getHeight()){
return -1;
}else if(o1.getHeight() < o2.getHeight()){
return 1;
}
return 0;
}
});
System.out.println("采用自定义排序器Compareator,根据身高排序");
for (Person p:objects) {
System.out.println(p);
}
}
}
二、二者有何不同
compareable接口:
集合中需要排序的对象必须实现Compareable接口,重写compareTo(Object o)方法,拿当前对象和o进行比较大小(大返回1,相等返回0,小返回-1),得修改目标类Person。
使用:
void sort(List list)
compareator接口:
集合中需要排序的对象无必需实现Compareator接口,可在外部重写compare(Object o1,Object o2)方法,拿o1和o2进行比较大小(大返回1,相等返回0,小返回-1), 不用修改目标类Person。
使用:
void sort(List list, Comparator<? super T> c)
Collections.sort(objects, new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
if(o1.getHeight()>o2.getHeight()){
return -1;
}else if(o1.getHeight() < o2.getHeight()){
return 1;
}
return 0;
}
});