以下为个人学习心得:
问题在于在实现compartaor时该怎么写才是降序,该怎么写才是升序?
int [] a={1,3,7,6,4,9};Arrays.sort(a, new Comparator<Integer>() { public int compare(Integer o1, Integer o2) {return o1-o2;//升序排序// return o2-o1;//降序排序}});
首先需要知道两个知识点:
(1).sort()函数默认从小到大排序
(2).comparator类的compar(T a,T b)方法需要重写,返回正数意味着传入的参数a>b;返回负数意味着a<b;返回0意味着a=b;
接下来就开始分析,最终目的是将数组降序排序。
如果在传入参数时实际上a<b,那么我们希望输出时是ba序列,由(1)可知b应该要“小于”a,也就是a>b,又由(2)可知既然要a>b,那么方法需要返回正数,即:
public int compare(Integer o1, Integer o2) {if(a<b) return 1;}
同理,如果在传入参数时实际上a>b,那么我们希望输出时是ab序列,由(1)可知a应该要“小于”b,也就是a<b,又由(2)可知既然要a<b,方法需要返回负数,即:
public int compare(Integer o1, Integer o2) {if(a>b) return -1;}
同理 当a=b时,代码为:
public int compare(Integer o1, Integer o2) {if(a==b) return 0;}
综上所述:要实现数组降序排序,完整代码应该是:
public int compare(Integer o1, Integer o2) {if(a<b) return 1;else if(a>b) return -1;else return 0;}
上述代码的简略写法便是:
public int compare(Integer o1, Integer o2) {return o2-o1;//降序排序}
那么升序排序或多个条件判断下的升降序排序都可以根据上述基础思想写出来了。
最后感谢该位博主给我的启示:https://blog.csdn.net/chewan7560/article/details/100634253。