下面通过两个例子来比较
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]]
这里也没有问题