黑马程序员技术交流社区
标题:
关于Collcetions的二分查找疑惑 大神进来看看
[打印本页]
作者:
kira
时间:
2014-1-27 16:40
标题:
关于Collcetions的二分查找疑惑 大神进来看看
复习到Collcetions的binarySearch这块了
结果 二分查找的时候 有个实例 着实让人不明白
下面随便写了个示例代码
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
public class ListDemoC {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
maxShow();//调用方法
}
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);//打印角标数
}
}
复制代码
这里打印集合就不多说了 但我获取到的角标却是-3
这个很不科学 为了验证下 我这方法 我又search了下WWW结果这次是2 对了
求教 为什么这里我获取的首元素角标却成了不存在 而且还是-3呢
如果我想让它获取到角标0的话 该怎么改 {:soso_e136:}
作者:
贺奕凯
时间:
2014-1-28 23:25
试了楼主的源码,发现确实是这种情况,自己找了半天都没发现原因,特地去查了API文档,终于知道答案:
使用二分搜索法搜索指定列表,以获得指定对象。在进行此调用之前,必须根据列表元素的自然顺序对列表进行升序排序(通过 sort(List) 方法)。如果没有对列表进行排序,则结果是不确定的。如果列表包含多个等于指定对象的元素,则无法保证找到的是哪一个。
源码修改如下:
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
public class Demo2 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
maxShow();//调用方法
}
public static void maxShow(){
List<String> al = new ArrayList<String>();
al.add("java");
al.add("hello");
al.add("www");
//String s = Collections.max(al);
Collections.sort(al);//进行升序排列
int i = Collections.binarySearch(al, "java");
int j = Collections.binarySearch(al, "hello");
System.out.println(al);//排列后的结果
System.out.println(i);//打印角标数
System.out.println(j);//打印角标数
}
}
复制代码
作者:
kira
时间:
2014-1-29 12:37
贺奕凯 发表于 2014-1-28 23:25
试了楼主的源码,发现确实是这种情况,自己找了半天都没发现原因,特地去查了API文档,终于知道答案:
使 ...
大神!!! 太感谢了 我去试试
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2