集合set中的TreeSet默认会将集合类的类进行排序,但是如果集合是一个自定义类的时候默认排序就会出现错误,这时候就要对排序方法进行重写。
涉及到两个类,一个是自定义的类(默认排序下出现错误的类)。
另一个是重写默认排序,使自定义的类可以正常使用的类
重新写的排序算法如下
class oreder implements Comparator<person> //Comparator<要排序的类名>
{
@Override
public int compare(person o1, person o2)//重写Comparator中的compare方法,比较o1和o2
{
if (o1.age>o2.age)return 1; //比较age
else if(o1.age<o2.age)return -1;
else return 0; //升序,相反为降序
}
}
写一个自定义person类,比较年龄
class person {
int age;
String name;
public person(int age,String name) //自定义构造器
{
this.age=age;
this.name=name;
}
}
以下是全部代码
import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;
public class main {
public static void main(String[] args) {
person p1=new person(23,"one");
person p2=new person(88,"two");
person p3=new person(21,"three");
//三个待排序的对象
Set <person> set=new TreeSet<person>(new oreder());
//Set <自定类名> 对象名称 =newTreeSet <自定类名>(new 重写排序类名)
set.add(p1);
set.add(p2);
set.add(p3);
//三个对象进入集合中
for (person x:set)
{
System.out.println(x.name+" , "+x.age);
}
}
}
/*****************自定义person类*******************/
class person {
int age;
String name;
public person(int age,String name)
{
this.age=age;
this.name=name;
}
}
/*****************自定义排序类*******************/
class oreder implements Comparator<person>
{
@Override
public int compare(person o1, person o2)
{
if (o1.age>o2.age)return 1;
else if(o1.age<o2.age)return -1;
else return 0;
}
}
以上输出结果为
three , 21
one , 23
two , 88