美文网首页
Collections----binarySearch

Collections----binarySearch

作者: 东风谷123Liter | 来源:发表于2018-09-22 11:26 被阅读0次
  • 二分法查找的前提是:序列有序;所以在再调用binarySearch方法之前,我们先要对元素进行排序;
  • 常用形式:
public static void main(String[] args) {
           List<String> li = new ArrayList<String>();
           li.add("abcd");
           li.add("llbc");
           li.add("dddddd");
           li.add("dddddd");
           li.add("kl"
           sop("未排序前  "+li);
           Collections.sort(li);
           sop("自然排序后  "+li);
           //正常查找:
           int index = Collections.binarySearch(li,"llbc");
           sop("llbc 角标: "+index);
           //非正常查找:
           int index1 = Collections.binarySearch(li,"bb");
           sop("bb 角标: "+index1);
     }
     public static void sop(Object obj) {
           System.out.println(obj);
     }
  • 结果: image.png
  • 下面我们再来回顾一下二分法查找:
**//自定义一个二分法查找器,回顾一下二分法的原理;**
     //返回索引,即角标。
     public static int halfSearch(List<String> li, String key) {
           int min, mid, max;
           min = 0;
           max = li.size();
           while(min<+max) {
                mid = (min+max) >> 1;//  /2
                String str = li.get(mid);
                int num =  str.compareTo(key);
                if(num>0)
                     max = mid-1;
                else if(num<0)
                     min = mid+1;
                else
                     return mid;
           }
           //当遍历完整个集合序列还未找到指定元素,就返回-1;
           return -1;
     }
  • 查询:
**sop("未排序前  "+li);**
           Collections.sort(li);
           sop("自然排序后  "+li);
           //正常查找:
           int index = halfSearch(li,"kwwwwl");
           sop("kwwwwl 角标: "+index);
           //非正常查找:
           int index1 = halfSearch(li,"bb");
           sop("bb 角标: "+index1);
  • 结果:

相关文章

  • Collections----binarySearch

    二分法查找的前提是:序列有序;所以在再调用binarySearch方法之前,我们先要对元素进行排序; 常用形式: ...

网友评论

      本文标题:Collections----binarySearch

      本文链接:https://www.haomeiwen.com/subject/yvntoftx.html