我现在自己定一个折半查找 方法写好了 运行通过了 发现角标有的对 有的不对 
而且 我用Collcetions.sort方法里面传比较器能用  
我在我的方法里传比较器 比较的却还是默认比较器的比较方式 
我的比较方式是按照字符串长度排序 
下面是我的代码 
- import java.util.ArrayList;
 
 - import java.util.Collection;
 
 - import java.util.Collections;
 
 - import java.util.Comparator;
 
 - import java.util.List;
 
  
- public class ListDemoC {
 
  
-         /**
 
 -          * @param args
 
 -          */
 
 -         public static void main(String[] args) {
 
 -                 // TODO Auto-generated method stub
 
 -                 List<String> arraylist = new ArrayList<String>();
 
 -                 arraylist.add("java");
 
 -                 arraylist.add("hello");
 
 -                 arraylist.add("www");
 
 - //                maxShow();
 
 -                  int i1 =myHalfSearch(arraylist,"ww",new mycomHalf());
 
 -                 System.out.println(arraylist);
 
 -                  System.out.println(i1);
 
 -                  Collections.sort(arraylist, new mycomHalf());
 
 -                  System.out.println(arraylist);
 
 -         }
 
 -         public static void maxShow(){//原先的折半查找
 
 -                 List<String> al = new ArrayList<String>();
 
 -                 al.add("java");
 
 -                 al.add("hello");
 
 -                 al.add("www");
 
 -                 String s = Collections.max(al);
 
 -                 int i = Collections.binarySearch(al, "java");
 
 -         System.out.println(al);//打印最大值
 
 -                 System.out.println(i);//打印角标数
 
 -         }
 
 -         
 
 -         //制造我自己的折半查找的方法
 
 -         public static int myHalfSearch(List<String> list,String key,mycomHalf com){
 
 -                 int max,min,mid;
 
 -                 max = list.size()-1;
 
 -                 min=0;
 
 -                 
 
 -                 while(min<=max){
 
 -                         mid=(max+min)>>1;//这句话相当于相加除以2
 
 -                         //获取到中间的角标
 
 -                         String s = list.get(mid);//已经获取到中间角标 
 
 -                         int num= com.compare(s, key);//比较一下
 
 -                         if(num>0){
 
 -                                 max = mid-1;
 
 -                                 
 
 -                         }
 
 -                         else if(num<0){
 
 -                                 
 
 -                                 min = mid+1;
 
 -                                 
 
 -                         }
 
 -                         else{
 
 -                         return mid;
 
 -                         }
 
 -                         
 
 -                 }
 
 -         
 
 -                 return -min-1;//返回插入点-1
 
 -                 
 
 -         }
 
  
- }
 
 - class mycomHalf implements Comparator<String>{//我自己的比较器
 
  
-         
 
 -         public int compare(String s1, String s2) {
 
 -                  return new Integer(s1.length()).compareTo(new Integer(s2.length()));//按照长度进行比较
 
 -                 // TODO Auto-generated method stub
 
 -                 
 
 -         }
 
 -         
 
 -         
 
 -         
 
 - }
 
  复制代码 我验证了一下 当传入java 和hello的时候 角标没错 但传入了www角标却不正确了 
而且 还有我的方法没有实现我自己比较器的比较方式 Collcetions.sort方法传入的比较器却成功了 这是为什么呢 求指教{:soso_e136:} 
 
 
 |