1:Person类中重写compareTo()函数
class Person implements Comparable<Person> {
public String name;
public int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public int compareTo(Person o) {
return this.age - o.age;
}
@Override
public String toString () {
return this.age + " " + this.name;
}
}
static void test12() {
TreeSet<Person> ts = new TreeSet<>();
Person p1 = new Person("小明", 19);
Person p2 = new Person("小红", 10);
Person p3 = new Person("小军", 12);
ts.add(p1);
ts.add(p2);
ts.add(p3);
for (Person i : ts) {
System.out.println(i.toString());
}
}
结果:
10 小红
12 小军
19 小明
2:调用次数较少或只用一次时,写匿名函数
static void test13() {
TreeSet<Person> ts = new TreeSet<Person>(
new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
return o1.age - o2.age;
}
}
);
Person p1 = new Person("小明", 19);
Person p2 = new Person("小红", 10);
Person p3 = new Person("小军", 18);
ts.add(p1);
ts.add(p2);
ts.add(p3);
for (Person i : ts) {
System.out.println(i.toString());
}
}
结果:
10 小红
12 小军
19 小明
3:创建Comparator接口的实现类,然后调用带参构造传入该类的对象com
class AgeCom implements Comparator<Person> {
@Override
public int compare(Person o1, Person o2) {
return o1.age - o2.age;
}
}
static void test14() {
Comparator<Person> com = new AgeCom();
TreeSet<Person> ts = new TreeSet<Person>(com);
Person p1 = new Person("小明", 19);
Person p2 = new Person("小红", 10);
Person p3 = new Person("小军", 12);
ts.add(p1);
ts.add(p2);
ts.add(p3);
for (Person i : ts) {
System.out.println(i.toString());
}
}
结果:
10 小红
12 小军
19 小明