1700444810
1700444811
使用binarySearch首先要考虑排序问题,这是我们编码人员经常容易忘记的,而且在测试期间还没发现问题(因为测试时“制造”的数据都很有规律),等到投入生产系统后才发现查找的数据不准确,又是一个大Bug产生了,从这点来看,indexOf要比binarySearch简单得多。
1700444812
1700444813
当然,使用binarySearch的二分法查找比indexOf的遍历算法性能上高很多,特别是在大数据集而且目标值又接近尾部时,binarySearch方法与indexOf相比,性能上会提升几十倍,因此在从性能的角度考虑时可以选择binarySearch。
1700444814
1700444815
注意 从性能方面考虑,binarySearch是最好的选择。
1700444816
1700444817
1700444818
1700444819
1700444821
编写高质量代码:改善Java程序的151个建议 建议75:集合中的元素必须做到compareTo和equals同步
1700444822
1700444823
实现了Comparable接口的元素就可以排序,compareTo方法是Comparable接口要求必须实现的,它与equals方法有关系吗?有关系,在compareTo的返回为0时,它表示的是进行比较的两个元素是相等的。equals是不是也应该对此作出相应的动作呢?我们看如下代码。
1700444824
1700444825
class City implements Comparable<City>{
1700444826
1700444827
//城市编码
1700444828
1700444829
private String code;
1700444830
1700444831
//城市名称
1700444832
1700444833
private String name;
1700444834
1700444835
public City(String_code, String_name){
1700444836
1700444837
code=_code;
1700444838
1700444839
name=_name;
1700444840
1700444841
}
1700444842
1700444843
/*code、name的getter/setter方法省略*/
1700444844
1700444845
@Override
1700444846
1700444847
public int compareTo(City o){
1700444848
1700444849
//按照城市名称排序
1700444850
1700444851
return new CompareToBuilder()
1700444852
1700444853
.append(name, o.name)
1700444854
1700444855
.toComparison();
1700444856
1700444857
}
1700444858
1700444859
@Override
[
上一页 ]
[ :1.70044481e+09 ]
[
下一页 ]