应用中对于系统函数,比如sort,默认是从小到大的排序,现在我想让它从大到小的排序,我该怎么做呢?
或者我有一组对象,学生类,有学号、年龄、分数等属性,我一会想按学号排,一会想按年龄排,一会想按分数排,如何做呢?比较器或者叫运算符重载就派上用处了。
原理上就是先定义两个对象,然后定义返回值。返回值分>,< ,=.哪种语言都是一样的。
首先我要有两个对象,其次我定义了返回值。
比如:两个对象 o1,o2比大小 从大到小排 O1>O2
// 1.返回负数时 o1应该排在O2的前面
// 2.返回正数时 o2应该排在O1的前面
// 3.返回0时,谁排前面都可以
1.大小排序
main(string[]args)
{
int []arr={6,0,4,1,9,2};
Arrays.sort(arr,new MyCompar());
for(int i=0;i<arr.length;i++)
{
System.out.print(arr[i]+"");
}
}
int mycompare(int o1,int o2)
{
/* if(o1>o2) { return -1; }
if(o2>o1) { return 1; }
return 0;*/
return o2-o1;//从大到小
return o1-o2;//从小到大
}
2.学生类按学号、年龄、分数等排序
class student()
{
string name;
int id;
int age;
}
public static void main(string[]args)
{
student s1=new student("奔跑1",1,16);
student s2=new student("奔跑2",2,17);
student s3=new student("9591",3,25);
student[] arrs=new student[]{s3,s2,s1};
Arrays.sort(arrs,new StudentComp());
Arrays.sort(arrs); //1.不指定比较器
Arrays.sort(arrs,new studentCompare();//2.一个类一个方法排序
//O2.age-O1.age 哪个年龄大哪个放上面
priorityQueue<student> heap=new PriorityQueue<>(new studentComp());
heap.add(s1);
heap.add(s2);
heap.add(s3);
while(!heap.isEmpty())
{
Student cur=heap.poll();
}
System.out.println(cur.name+","+cur.classNo+","+cur.age);
}
}
public static class StudentComp implements Comparator<student>
{
public int compare(Student o1,Student o2)
{
if(o1.classNo!=o2.classNo)
{
return o1.classNo-o2.classNo;
}
return o2.age-o1.age;
}
//从小到大 o1.id-o2.id 由大到小的话 o2.id-o1.id
//比较器 按id排
public int studentCompareId(student st1,student st2)
{
return o1.id-o2.id;
}
//按年龄排
public int studentCompareAge(student st1,student st2)
{
return o1.age-o2.age;
}
//
}
原文链接: https://www.cnblogs.com/jasmineTang/p/14369305.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;
也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/327455
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!