- 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吗?)
|