区别
- comparable接口出自 java.lang 包,该接口提供了比较元素的comparaTo方法
- comparator接口出自 java.util 包,该接口提供了compare方法
comparable使用
类必须实现comparable接口,并重写compareTo方法
package comparable_test;
public class USer implements Comparable<USer> {
private String name;
private int age;
public USer(String name, int age) {
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 "USer{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public int compareTo(USer o) {
if (this.age > o.getAge()) {
return 1;
} else if (this.age < o.getAge()) {
return -1;
} else {
return 0;
}
}
}
package comparable_test;
import java.util.Arrays;
public class Test_10_03 {
public static void main(String[] args) {
USer wzx = new USer("wzx", 20);
USer wwwx = new USer("wwwzx", 11);
USer wzzzx = new USer("wzzzx", 22);
USer[] user_arr= new USer[]{wzx, wwwx, wzzzx};
Arrays.sort(user_arr);
Arrays.stream(user_arr).forEach(System.out::println);
}
}
比较前后的运行结果
comparator的使用
package comparator_test;
public class Child {
private String name;
private int id;
public Child(String name, int id) {
this.name = name;
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Override
public String toString() {
return "Child{" +
"name='" + name + '\'' +
", id=" + id +
'}';
}
}
package comparator_test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
public class Child_test {
public static void main(String[] args) {
Child wzx1 = new Child("wzx", 20);
Child wzx2 = new Child("wzx", 10);
Child wzx3 = new Child("wzx", 220);
ArrayList<Child> children = new ArrayList<>(Arrays.asList(wzx1, wzx2, wzx3));
Collections.sort(children, new Comparator<Child>() {
@Override
public int compare(Child o1, Child o2) {
return o1.getId() > o2.getId() ? 1 : (o1.getId() == o2.getId() ? 0 : -1);
}
});
children.stream().forEach(System.out::println);
}
}
使用Collections.sort()排序,注意comparator接口并重写compare方法
运行结果比较