class Demo {
public static void main(String[] args) {
binarySearchDemo();
}
public static void binarySearchDemo() {
List<String> list = new ArrayList<String>();
list.add("abcd");
list.add("a");
list.add("z");
list.add("kkkkk");
list.add("qq");
sop(list);
int index = Collections.binarySearch(list, "a");
//int index = halfSearch(list, "a");
sop("index:" + index);
}
public static int halfSearch(List<String> list, String key) {
int min, max, mid;
max = list.size() - 1;
min = 0;
while(min<=max) {
mid = (max+min)>>1;
String str = list.get(mid);
int num = str.compareTo(key);
if(num > 0) {
max = mid - 1;
}
else if(num < 0) {
min = mid + 1;
}
else {
return mid;
}
}
return -min-1;
}
public static void sop(Object obj) {
System.out.println(obj);
}
}
上不了图,无论是使用binarySearch还是自定义的halfSearch,index结果显示都是-1,但根据这个方法的说明(如果搜索键包含在列表中,则返回搜索键的索引;),期望的结果应该是1才对,请问是哪里出错了?
------解决方案--------------------
先排序 Collections.sort(list);
------解决方案--------------------
JDK所有binarySearch接口,都需要自行将相关的集合/数组/容器,排序,然后再调用binarySearch
------解决方案--------------------
你没理解 二分法的意思。。 得排好才能查找。
假如1345678 里面查找 4
如果不排序3451678,先折半找到1的话,就会右边查找。1678 这里面找肯定找不到4了。
返回就是 -1