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)来改变它的行为。

最新文章

  1. JNI开发的常见错误
  2. 如何自定义jupyter notebook的主题
  3. cobbler自动安装脚本
  4. Boolean强制转换
  5. Servlet课程0425(七) 到数据库中去验证用户,同时防止SQL注入漏洞
  6. leetcode 第九题 Palindrome Number(java)
  7. mysql inner join,full outer join,left join,right jion
  8. 分享一个牛逼的PHP无限极分类生成树方法,巧用引用(转)
  9. Android窗口管理服务WindowManagerService显示窗口动画的原理分析
  10. eclipse开发velocity实例(初学)
  11. 实现quartz定时器及quartz定时器原理介绍(转)
  12. 微信官方团队放出了UI库,看来以后前端还要学WeChatUI了,哈哈
  13. tr 命令详解
  14. Shiro入门这篇就够了【Shiro的基础知识、回顾URL拦截】
  15. JavaScript实现图片轮播图
  16. Intellij IDEA导入eclipse项目配置jdk、tomcat到浏览器正常访问
  17. CentOS下软件安装与卸载常用命令总结
  18. Anaconda部署python环境
  19. AndroidStudio制作底部导航栏以及用Fragment实现切换功能
  20. JMeter学习(二十四)HTTP属性管理器HTTP Cookie Manager、HTTP Request Defaults(转载)

热门文章

  1. 《深入理解Nginx:模块开发与架构解析》(一)
  2. tomcat war包自动化部署脚本
  3. linux如何手动释放linux内存
  4. sublime text3 修改左边栏背景颜色为编辑栏颜色
  5. Centos RSA 登录
  6. Zookeeper之ZKClient的使用
  7. spark集群模式
  8. Spring读取配置文件的方式总结
  9. [Tomcat]无法使用tomcat6.exe启动服务解决办法, The system cannot find the Registry key for service &#39;tomcat7&#39;
  10. Java-文件上传和下载