TreeSet排序的有两种比较方法
第一种方式:让元素自身具备比较性。
步骤 1,集合中的元素类 implements Comparable接口,
2,覆盖public int compareTo(Object obj)方法。
也种方式也成为元素的自然顺序,或者叫做默认顺序。
例如:
1,class Student implements Comparable<Student>//(第一种方式)该接口强制让学生(集合中的元素)具备比较性。
{
private String name;
private int age;
Student(String name,int age)
{
this.name = name;
this.age = age;
}
2,public int compareTo(Student s)//******必须做*******
{
int num = this.getAge()-s.getAge();
if(num == 0)
return this.getName().compareTo(s.getName());
return num;
}
}
TreeSet<Student> ts = new TreeSet();//第一种实现元素比较性的方式!
第二种方式:传入一个比较器
当元素自身不具备比较性时,或者具备的比较性不是所需要的。
这时就需要让集合自身具备比较性。
步骤 1,class MyCompare implements Comparator//定义的比较器
2,public int compare(Object o1,Object o2)//需要实现的方法
3,初始化时TreeSet ts = new TreeSet(new MyCompare());
例如:
1,class MyCompare implements Comparator<Student>//第二种实现元素比较性的方式=自定义的比较器。
{
2,public int compare(Student s1,Student s2)//********必须复写************
{
//Student s1 = (Student)o1;//将元素向下转型!-----------------
//Student s2 = (Student)o2;//
int num = s1.name.compareTo(s2.name);
if(num == 0)
return (s1.age-s2.age);
return num;
}
}
3,TreeSet<Student> ts = new TreeSet(new MyCompare());//第二种方式!用比较器的方法比较。
|