9512.net
甜梦文库
当前位置:首页 >> 英语考试 >>

学习手札1:关于Collections.sort()对列表排序的学习


学习手札 1:关于 Collections.sort()对列表排序的学习

最近收到一些 Java 初学者对 Java 关于 ArrayList 的排序问题, 然后给 他们解释 Collections.sort()方法的时候, 总是无法解释清楚。 在使用的时 候,常常很头疼,因为不知道返回什么样的值才能达到升序效果,返回什么样的 值才能达到降序效果。 今天,对这一部分进行了一次梳理,也算是对这个排序做一次总结。 首先,我们来看一个例子吧:现在,需要遍历一个文件夹,要求 XML 文件 靠前。我们得到了无序的文件列表 ArrayList<File> files,这个时候排序 代码如下:
Collections.sort(files, new Comparator<File>() { public int compare(File arg0, File arg1) { if (arg0.getName().endsWith(".XML")) return -1; else if (arg1.getName().endsWith(".XML")) return 1; return 0; } }); 注意:这里没有使用忽略大小写的比较方式,如果文件后缀名为小写 ".xml",则比较失败。 不过这个不是我要说明的重点。

对于上述比较,为什么 arg0 的时候返回-1,arg1 的时候返回 1?同理, 对于两个文件,哪个文件靠前,哪个文件靠后,方法 compare(File arg0, File arg1),应该返回什么样的值,才能达到理想效果? OK,看看 JDK1.6 的 API,关于 Comparator 的介绍: Comparator.compare(T o1,T o2),返回的是 o1 与 o2 比较的大小, 返回值只有三种可能:负数、0、正数。 用一个数学公式来抽象:return (o1-o2) 如果 o1-o2<0,返回负数,此时就应该是 o1 在前面。

如果 o1-o2>0,返回正数,此时就应该是 o2 在前面。 o1=o2 的情况就不罗嗦。

从 API 的介绍以及我自己理解,我等到的结论是:Comparator.compare(), 默认是做升序排序的。 所以,回过头来,我们看上面的例子: 当第一个文件 arg0 为 XML 文件的时候, 我们返回-1; 此时满足 o1-o2<0 的条 件; 当第二个文件 arg1 为 XML 文件的时候,我们返回 1。测试满足 o1-o2>0 的条 件。 最后,如果要降序排序,只需要变换比较公式即可:return -(o1-o2) = return o2-o1;
如果要第一个参数靠前,那么就要返回小于 0 的数字;如果要第二个参数靠前,就要返回 大于 0 的数字。



更多相关文章:
你不知道的事情:关于Java Collections API(第部分)
你不知道的事情:关于Java Collections API(第部分)_IT/计算机_专业资料。您觉得...虽然可以编写代码 一遍又一遍地对孩子排序(也许是使用 Collections.sort 方法),...
更多相关标签:

All rights reserved Powered by 甜梦文库 9512.net

copyright ©right 2010-2021。
甜梦文库内容来自网络,如有侵犯请联系客服。zhit325@126.com|网站地图