黑马程序员技术交流社区
标题:
模拟集合工具类写了一个二分查找的方法,求解惑
[打印本页]
作者:
周昭民
时间:
2014-2-11 19:18
标题:
模拟集合工具类写了一个二分查找的方法,求解惑
import java.util.*;
class CollectionsDemo2
{
public static void main(String args[]){
List<String> list=new ArrayList<String>();
list.add("ajdlk");
list.add("dfk");
list.add("jdl");
list.add("al");
list.add("zl");
list.add("al");
Collections.sort(list); //使用二分查找先,必须先保证该集合为有序集合
// System.out.println("index="+Collections.binarySearch(list,"zlw")); //查找(当无对应元素时,返回该角标插入值-1)
System.out.println(list);
System.out.println("index="+myBinarySearch(list,"zz"));//使用自定义排序查找,无自定义比较器
}
public static int myBinarySearch(List<String> list,String key){//自定义查找方法(模拟Collections.binarySearch()方法)
int min=0;
int max=list.size()-1;
int mid; //中间值
while(min<=max){
mid=(max+min)/2;
int num=list.get(mid).compareTo(key);
if(num>0)
max=mid-1;
else if(num<0)
min=mid+1;
else
return mid;
}
return -min-1; //当没有查到该值时,返回的是该值插入集合所在的角标位置再-1,可是为啥min是插入位置呢(不能是max?)
}
}
复制代码
自己写了一个模拟集合工具类中binarySearch()方法。
当没有查到该值时,返回的是该值插入集合所在的角标位置再减1,可是为啥min是插入位置呢(比如不可以是max吗?)
作者:
ixiangfeng
时间:
2014-2-11 19:24
根据你所用的折半原理结果是谁就是谁啊 它刚好就是在那个位置也没办法啊 具体你可以自己根据你的代码去走一遍就知道了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2