打字猴:1.70044462e+09
1700444620
1700444621 现在问题又来了:按职位临时倒序排列呢?注意只是临时的,是否要重写一个排序器?完全不用,有两个解决办法:
1700444622
1700444623 直接使用Collections.reverse(List<?>list)方法实现倒序排列。
1700444624
1700444625 通过Collections.sort(list, Collections.reverseOrder(new PositionComparator()))也可以实现倒序排列。
1700444626
1700444627 第二个问题:先按照职位排序,职位相同再按照工号排序,这如何处理?这可是我们经常遇到的实际问题。很好处理,在compareTo或compare方法中先判断职位是否相等,相等的话再根据工号排序,使用apache的工具类来简化处理,代码如下:
1700444628
1700444629 public int compareTo(Employee o){
1700444630
1700444631 return new CompareToBuilder()
1700444632
1700444633 .append(position, o.position)//职位排序
1700444634
1700444635 .append(id, o.id).toComparison();//工号排序
1700444636
1700444637 }
1700444638
1700444639 在JDK中,对Collections.sort方法的解释是按照自然顺序进行升序排列,这种说法其实是不太准确的,sort方法的排序方式并不是一成不变的升序,也可能是倒序,这依赖于compareTo的返回值,我们知道如果compareTo返回负数,表明当前值比对比值小,零表示相等,正数表明当前值比对比值大,比如我们修改一下Employee的compareTo方法,如下所示:
1700444640
1700444641 public int compareTo(Employee o){
1700444642
1700444643 return new CompareToBuilder()
1700444644
1700444645 .append(o.id, id).toComparison();
1700444646
1700444647 }
1700444648
1700444649 两个参数调换了一下位置,也就是compareTo的返回值与之前正好相反,再使用Collections.sort进行排序,顺序也就相反了,这样就实现了倒序。
1700444650
1700444651 第三个问题:在Java中,为什么要有两个排序接口呢?
1700444652
1700444653 很多同学都提出了这个问题,其实也好回答,实现了Comparable接口的类表明自身是可比较的,有了比较才能进行排序;而Comparator接口是一个工具类接口,它的名字(比较器)也已经表明了它的作用:用作比较,它与原有类的逻辑没有关系,只是实现两个类的比较逻辑,从这方面来说,一个类可以有很多的比较器,只要有业务需求就可以产生比较器,有比较器就可以产生N多种排序,而Comparable接口的排序只能说是实现类的默认排序算法,一个类稳定、成熟后其compareTo方法基本不会改变,也就是说一个类只能有一个固定的、由compareTo方法提供的默认排序算法。
1700444654
1700444655 注意 Comparable接口可以作为实现类的默认排序法,Comparator接口则是一个类的扩展排序工具。
1700444656
1700444657
1700444658
1700444659
1700444660 编写高质量代码:改善Java程序的151个建议 [:1700438145]
1700444661 编写高质量代码:改善Java程序的151个建议 建议74:不推荐使用binarySearch对列表进行检索
1700444662
1700444663 对一个列表进行检索时,我们使用得最多的是indexOf方法,它简单、好用,而且也不会出错,虽然它只能检索到第一个符合条件的值,但是我们可以生成子列表后再检索,这样也就可以查找出所有符合条件的值了。
1700444664
1700444665 Collections工具类也提供一个检索方法:binarySearch,这个是干什么的?该方法也是对一个列表进行检索的,可查找出指定值的索引值,但是在使用这个方法时就有一些注意事项了,我们看如下代码:
1700444666
1700444667 public static void main(String[]args){
1700444668
1700444669 List<String>cities=new ArrayList<String>();
[ 上一页 ]  [ :1.70044462e+09 ]  [ 下一页 ]