下面通過兩個例子來比較
1.Comparable
Person類直接實現Comparable接口
import java.util.Objects;
public class Person implements Comparable<Person>{
private int id;
private String name;
private double salary;
public Person() {}
public Person(int id, String name, double salary) {
super();
this.id = id;
this.name = name;
this.salary = salary;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
@Override
public int hashCode() {
return Objects.hash(id, name, salary);
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (null == obj || this.getClass() != obj.getClass()) {
return false;
}
Person person = (Person) obj;
return id == person.id &&
name.equals(person.name) &&
salary == person.salary;
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", salary=" + salary + "]";
}
@Override
public int compareTo(Person o) {
int ret = (int) ((this.salary - o.salary) * 100);
return ret;
}
}
實例檢驗:
import java.util.TreeSet;
public class Demo4 {
public static void main(String[] args) {
TreeSet<Person> treeSet = new TreeSet<Person>();
Person p1 = new Person(1, "劉備", 10.23);
Person p2 = new Person(2, "關羽", 29.54);
Person p3 = new Person(3, "張飛", 20.23);
Person p4 = new Person(4, "趙雲", 49.12);
Person p5 = new Person(5, "馬超", 19.32);
Person p6 = new Person(6, "黃忠", 1.56);
Person p7 = new Person(6, "黃忠", 1.57);
treeSet.add(p1);
treeSet.add(p2);
treeSet.add(p3);
treeSet.add(p4);
treeSet.add(p5);
treeSet.add(p6);
treeSet.add(p7);
System.out.println(treeSet);
}
}
結果:
[Person [id=6, name=黃忠, salary=1.56], Person [id=6, name=黃忠, salary=1.57], Person [id=1, name=劉備, salary=10.23], Person [id=5, name=馬超, salary=19.32], Person [id=3, name=張飛, salary=20.23], Person [id=2, name=關羽, salary=29.54], Person [id=4, name=趙雲, salary=49.12]]
按照salary升序排列,沒有任何問題
2.Comparator
自定義personComparator
import java.util.Comparator;
public class personComparator implements Comparator<Person> {
@Override
public int compare(Person o1, Person o2) {
int ret = (int) ((o1.getSalary() - o2.getSalary()) * 100);
return ret;
}
}
實例實現:
public class Demo5 {
public static void main(String[] args) {
TreeSet<Person> treeSet = new TreeSet<Person>(new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
int ret = (int) ((o1.getSalary() - o2.getSalary()) * 100);
return ret;
}
});
Person p1 = new Person(1, "劉備", 10.01);
Person p2 = new Person(2, "關羽", 29.54);
Person p3 = new Person(3, "張飛", 20.23);
Person p4 = new Person(4, "趙雲", 49.12);
Person p5 = new Person(5, "馬超", 19.32);
Person p6 = new Person(6, "黃忠", 10.78);
Person p7 = new Person(7, "諸葛亮", 1.56);
treeSet.add(p1);
treeSet.add(p2);
treeSet.add(p3);
treeSet.add(p4);
treeSet.add(p5);
treeSet.add(p6);
treeSet.add(p7);
System.out.println(treeSet);
}
}
結果:
[Person [id=7, name=諸葛亮, salary=1.56], Person [id=1, name=劉備, salary=10.01], Person [id=6, name=黃忠, salary=10.78], Person [id=5, name=馬超, salary=19.32], Person [id=3, name=張飛, salary=20.23], Person [id=2, name=關羽, salary=29.54], Person [id=4, name=趙雲, salary=49.12]]
這裏也沒有問題