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
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>();
1700444670
1700444671
cities.add(“上海”);
1700444672
1700444673
cities.add(“广州”);
1700444674
1700444675
cities.add(“广州”);
1700444676
1700444677
cities.add(“北京”);
1700444678
1700444679
cities.add(“天津”);
1700444680
1700444681
//indexOf方法取得索引值
1700444682
1700444683
int index1=cities.indexOf(“广州”);
1700444684
1700444685
//binarySearch查找到索引值
1700444686
1700444687
int index2=Collections.binarySearch(cities,“广州”);
1700444688
1700444689
System.out.println(“索引值(indexOf):”+index1);
[
上一页 ]
[ :1.70044464e+09 ]
[
下一页 ]