import java.util.*;
public class test03 {
public static void main(String[] args){
person p = new person(12);
person p1 = new person(52);
person p2 = new person(102);
person p3 = new person(92);
TreeSet ts = new TreeSet<>();
ts.add(p);
ts.add(p1);
ts.add(p2);
ts.add(p3);
for (Object i:ts ) {
System.out.println(i);
}
}
}
//放在Treeset集合中的元素需要实现comParable接口。
//并且实现comParaTo方法,equals可以不写。。
class person implements Comparable<person>{
int age;
public person(int age){
this.age=age;
}
//需要重写这个方法,编写比较的逻辑或规则,
//k.comParaTo(t.key)
//拿着参数k和集合中的每一个key进行比较,返回值可能是>0,<0,=0;
//比较规则最终还是由程序员决定:例如按年龄升序或者降序。
@Override
public int compareTo(person c) {//c1.comParaTo(c2);
//this是c1
//c是c2
//c1和c2比较的时候,就是this和c比较
/* int age1 = this.age;
int age2 = c.age;
if (age1 ==age2){
return 0;
} else if (age1 >age2) {
return 1;
} else{
return -1;
}*/
//也可以直接写成下面的这种形式
//return this.age-c.age;// =,<0,>0 升序
return c.age-this.age; //降序
}
public String toString(){
return "person[age="+age+"]";
}
}
运行结果:person[age=12]
person[age=52]
person[age=92]
person[age=102]
三、TreeSet集合中的元素可排序的第二种方式:使用比较器的方式。
import java.util.*;
//排序的第二种方式:使用比较器的方式
public class test03 {
public static void main(String[] args){
person p = new person(12);
person p1 = new person(52);
person p2 = new person(102);
person p3 = new person(92);
//创建TreeSet集合的时候,一定要给构造方法传递一个比较器
TreeSet<person> ts = new TreeSet<>(new PersonComparator());
//这里也可以使用创建匿名内部类的方式:
/*TreeSet<person> ts = new TreeSet<>(new Comparator<person>(){
@Override
public int compare(person o1, person o2) {
return o1.age - o2.age;
}
});*/
ts.add(p);
ts.add(p1);
ts.add(p2);
ts.add(p3);
for (Object i:ts ) {
System.out.println(i);
}
}
}
//单独在这里写一个比较器
//比较器实现java.util.Comparator接口
class person{
int age;
public person(int age){
this.age=age;
}
public String toString(){
return "person[age="+age+"]";
}
}
//比较器
class PersonComparator implements Comparator<person>{
@Override
public int compare(person o1, person o2) {
//按照年龄排序
return o1.age-o2.age;
}
}