当前位置: 代码迷 >> J2SE >> 关于Collections.binarySearch()的有关问题
  详细解决方案

关于Collections.binarySearch()的有关问题

热度:779   发布时间:2016-04-23 20:38:31.0
关于Collections.binarySearch()的问题

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
 
  相关解决方案