如何理解Comparator接口中的升降序?
2024-09-03 05:05:02
import java.util.*; class DescType implements Comparator
{
public int compare(Object o1, Object o2)
{
Integer i = (Integer)o1;
Integer j = (Integer)o2; return (i<j?1:(i==j?0:-1));
}
} public class Hello
{
public static void main(String[] args)
{
Integer a[] = {3, 1, 2};
Arrays.sort(a, new DescType()); for(int i:a)
System.out.println(i);
}
}
Q:由上代码: x<y为1即为真。。。也就是第一个参数比第二个参数小为真。。应该是升序排列,这里却是降序排列的,怎么理解??
A:compare函数的机制是自定义下若o1>o2则返回1,而上面的代码中若1<2会返回1,即在上面的自定义下,其实1是大于2的(即compare(1,2)=1),同理,2也会大于3.那么Array.sort()从小到大排序时其实3是最小的,故输出321,表面上是逆序了,实际是符合上面compare函数中的定义的,还是从小到大输出,只不过上面自定义下3是比1小的。
另外,Collections.sort(),Arrays.sort() 默认就是升序排列的(如API所说:
Sorts the specified list into ascending order, according to the natural ordering of its elements. All elements in the list must implement the Comparable interface)。
其实,明白了Comparator比较器的原理,就可以实现自定义排序了。
用 Comparator 是策略模式(strategy design pattern),就是不改变对象自身,而用一个策略对象(strategy object)来改变它的行为。
最新文章
- JNI开发的常见错误
- 如何自定义jupyter notebook的主题
- cobbler自动安装脚本
- Boolean强制转换
- Servlet课程0425(七) 到数据库中去验证用户,同时防止SQL注入漏洞
- leetcode 第九题 Palindrome Number(java)
- mysql inner join,full outer join,left join,right jion
- 分享一个牛逼的PHP无限极分类生成树方法,巧用引用(转)
- Android窗口管理服务WindowManagerService显示窗口动画的原理分析
- eclipse开发velocity实例(初学)
- 实现quartz定时器及quartz定时器原理介绍(转)
- 微信官方团队放出了UI库,看来以后前端还要学WeChatUI了,哈哈
- tr 命令详解
- Shiro入门这篇就够了【Shiro的基础知识、回顾URL拦截】
- JavaScript实现图片轮播图
- Intellij IDEA导入eclipse项目配置jdk、tomcat到浏览器正常访问
- CentOS下软件安装与卸载常用命令总结
- Anaconda部署python环境
- AndroidStudio制作底部导航栏以及用Fragment实现切换功能
- JMeter学习(二十四)HTTP属性管理器HTTP Cookie Manager、HTTP Request Defaults(转载)
热门文章
- 《深入理解Nginx:模块开发与架构解析》(一)
- tomcat war包自动化部署脚本
- linux如何手动释放linux内存
- sublime text3 修改左边栏背景颜色为编辑栏颜色
- Centos RSA 登录
- Zookeeper之ZKClient的使用
- spark集群模式
- Spring读取配置文件的方式总结
- [Tomcat]无法使用tomcat6.exe启动服务解决办法, The system cannot find the Registry key for service &#39;tomcat7&#39;
- Java-文件上传和下载