1700444740
1700444741
Comparable<?super T>midVal=list.get(mid);
1700444742
1700444743
//比较中间值
1700444744
1700444745
int cmp=midVal.compareTo(key);
1700444746
1700444747
//重置上界和下界
1700444748
1700444749
if(cmp<0)
1700444750
1700444751
low=mid+1;
1700444752
1700444753
else if(cmp>0)
1700444754
1700444755
high=mid-1;
1700444756
1700444757
else
1700444758
1700444759
//找到元素
1700444760
1700444761
return mid;
1700444762
1700444763
}
1700444764
1700444765
//没有找到,返回负值
1700444766
1700444767
return-(low+1);
1700444768
1700444769
}
1700444770
1700444771
这也没啥说的,就是二分法搜索的Java版实现。注意看加粗字体部分,首先是获得中间索引值,我们的例子中也就是2,那索引值是2的元素值是多少呢?正好是“广州”,于是返回索引值2,正确,没问题。那我们再看看indexOf的实现,代码如下:
1700444772
1700444773
public int indexOf(Object o){
1700444774
1700444775
if(o==null){
1700444776
1700444777
//null元素查找
1700444778
1700444779
for(int i=0;i<size;i++)
1700444780
1700444781
if(elementData[i]==null)
1700444782
1700444783
return i;
1700444784
1700444785
}else{
1700444786
1700444787
//非null元素查找
1700444788
1700444789
for(int i=0;i<size;i++)
[
上一页 ]
[ :1.70044474e+09 ]
[
下一页 ]