A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王凯路路 中级黑马   /  2014-7-31 18:28  /  1242 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. import java.util.*;
  2. class CollectionsDemo
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 binarySearchDemo();
  7.         }
  8.         //不理解啊!
  9.         public static void binarySearchDemo()
  10.         {
  11.                 List<String> list = new ArrayList<String>();

  12.                 list.add("abcd");
  13.                 list.add("aaa");
  14.                 list.add("z");
  15.                 list.add("kkkkk");
  16.                 list.add("qq");

  17.                 //Collections.sort(list);

  18.                 sop(list);
  19.                 int index = Collections.binarySearch(list,"aaa");
  20.                 //int index = halfSearch(list,"aaa");
  21.                 sop(index);
  22.         }
  23. }
复制代码


毕老师在视频里, Collections.binarySearch(list,"aaa") 返回的应该是-1,但是那是在排序的情况下.
然后我把sort()方法注释掉后,返回的值为什么就成了-2呢 ?  -2不是代表没有找到么?但是集合里确实有啊.

8 个回复

倒序浏览
没看懂表达的是啥意思
回复 使用道具 举报
Collections.binarySearch的方法在使用的时候是必须先对集合里的元素进行自然排序的,如果排序不固定的话返回的值就不一定了!我把代码修改了一下,楼主可以参考一下
  1. package day04;

  2. import java.util.*;

  3. class CollectionsDemo {
  4.         public static void main(String[] args) {
  5.                 binarySearchDemo();
  6.         }

  7.         // 不理解啊!
  8.         public static void binarySearchDemo() {
  9.                 List<String> list = new ArrayList<String>();

  10.                 list.add("abcd");
  11.                 list.add("aaa");
  12.                 list.add("z");
  13.                 list.add("kkkkk");
  14.                 list.add("qq");
  15.                 //先打印一下集合看是否存进去了
  16.                 System.out.println(list);
  17.                 //对集合元素进行排序
  18.                 Collections.sort(list);
  19.                 //打印排序后的集合
  20.                 System.out.println(list);
  21.                 //调用binarySearch方法之前必须先排序,否则结果不确定!!!
  22.                 int index = Collections.binarySearch(list, "aaa");
  23.                 // int index = halfSearch(list,"aaa");
  24.                 System.out.println(index);
  25.         }
  26. }
复制代码

楼主,这种疑问以后最好先查看帮助文档,这些文档里都有说明哦!!!
回复 使用道具 举报
楼主自己去看  折半查找!!!所查找的集合或者数组必须有序!!Collections.sort()方法就是排序用的
回复 使用道具 举报
本帖最后由 乐此不疲 于 2014-7-31 19:34 编辑

The list must be sorted into ascending order according to the natural ordering of its elements (as by the sort(List) method) prior to making this call. If it is not sorted, the results are undefined."意为使用二分法必须升序排列,否则结果不确定。
回复 使用道具 举报
戒风 来自手机 中级黑马 2014-7-31 19:50:03
地板
我是来学习知识的
回复 使用道具 举报
使用二分法查找的前提是你要进行查找操作的容器必须是有序的,sort方法就是对容器中元素进行排序,你注释掉了sort方法你如何保证容器中元素的有序性呢,于是就产生了你这样子的结果了。
回复 使用道具 举报
格子、 发表于 2014-7-31 18:43
Collections.binarySearch的方法在使用的时候是必须先对集合里的元素进行自然排序的,如果排序不固定的话返 ...

我知道排序后可以查到,    但是现在我想知道的是,  不排序为什么就找不到?  不过顺序多乱, 它都是确实存在的吧?不管怎么说也不能返回-2啊
回复 使用道具 举报
谢谢大家了,  我懂了...是我忽略了折半查找......
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马