如果觉得还可以 记得关注一下公众号哦!一起交流学习!
先看一下思路图
package com.test;
import java.util.*;
/**
* 测试二分查找
*/
public class TestS {
public static void main(String[] args) {
List<Integer> integers = new ArrayList<Integer>();
Random random = new Random();
for(int i = 0;i<10000000;i++){
integers.add(random.nextInt(10000000));
}
Collections.sort(integers, new Comparator<Integer>() {
public int compare(Integer o1, Integer o2) {
return o1.compareTo(o2);
}
});
long l = System.currentTimeMillis();
int test = test(integers, 84562);
long w = System.currentTimeMillis();
System.out.println(test);
System.out.println(l-w);
}
private static int test(List<Integer> ids,int key){
//开始值
int start = 0;
//结束值
int end = ids.size();
while (end >= start){
//求数组长度的半数
int mid = (start + end-1) >>> 1;
//目标值大于中间值 开始查找后半个数组
if(key > ids.get(mid)){
//开始值等于半数值+1
start = mid + 1 ;
//目标值小于中间值 开始查找当前数组的前半数组
}else if(key < ids.get(mid)){
//结束值等于半数值-1
end = mid -1 ;
}else{
return mid;
}
}
return -1;
}
}