黑马程序员技术交流社区

标题: 模拟集合工具类写了一个二分查找的方法,求解惑 [打印本页]

作者: 周昭民    时间: 2014-2-11 19:18
标题: 模拟集合工具类写了一个二分查找的方法,求解惑
  1. import java.util.*;

  2.         class CollectionsDemo2
  3.         {
  4.                 public static void main(String args[]){
  5.                         List<String> list=new ArrayList<String>();

  6.                         list.add("ajdlk");
  7.                         list.add("dfk");
  8.                         list.add("jdl");
  9.                         list.add("al");
  10.                         list.add("zl");       
  11.                         list.add("al");
  12.                         Collections.sort(list);        //使用二分查找先,必须先保证该集合为有序集合
  13.                 //        System.out.println("index="+Collections.binarySearch(list,"zlw"));        //查找(当无对应元素时,返回该角标插入值-1)
  14.                         System.out.println(list);
  15.                         System.out.println("index="+myBinarySearch(list,"zz"));//使用自定义排序查找,无自定义比较器
  16.                 }
  17.                 public static int myBinarySearch(List<String> list,String key){//自定义查找方法(模拟Collections.binarySearch()方法)
  18.                         int min=0;
  19.                         int max=list.size()-1;
  20.                         int mid;        //中间值

  21.                         while(min<=max){
  22.                                 mid=(max+min)/2;

  23.                                 int num=list.get(mid).compareTo(key);
  24.                                 if(num>0)
  25.                                         max=mid-1;
  26.                                 else if(num<0)
  27.                                         min=mid+1;
  28.                                 else
  29.                                         return mid;
  30.                         }
  31.                         return -min-1;        //当没有查到该值时,返回的是该值插入集合所在的角标位置再-1,可是为啥min是插入位置呢(不能是max?)
  32.                 }
  33.                
  34.         }
复制代码
自己写了一个模拟集合工具类中binarySearch()方法。当没有查到该值时,返回的是该值插入集合所在的角标位置再减1,可是为啥min是插入位置呢(比如不可以是max吗?)


作者: ixiangfeng    时间: 2014-2-11 19:24
根据你所用的折半原理结果是谁就是谁啊 它刚好就是在那个位置也没办法啊   具体你可以自己根据你的代码去走一遍就知道了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2