返回信息流就是这个函数:public static <T> int binarySearch(List list, T key, Comparator c)
int[] nums = new int[]{2,1,5,4,3};
ArrayList test = new ArrayList<>();
for (int i : nums) {
test.add(i);
}
Collections.sort(test, (o1,o2)-> (Integer)o1-(Integer)o2 );
for (Object i:test) {
System.out.print("["+i+"]"+Collections.binarySearch(test, (Integer)i,
new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2){
return o2-o1;
}
})+",");
}
执行这段代码后,输出是这样的:
[1]-6,[2]-6,[3]2,[4]-1,[5]-1,
求教binarySearch方法的Comparator参数到底做了些啥。。。
这是一条镜像帖。来源:北邮人论坛 / java / #56258同步于 2017/5/11
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
Collections binarySearch求助~
xlrainy
2017/5/11镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
为什么按compare方法搜索返回List元素1的下表是-6,2也是-6
【 在 ml3615556 的大作中提到: 】
: 作为二分搜索的依据啊,试试把你写的对数值数组的二分搜索的">, <, ="符号换成compare方法
Collections.sort传入的Comparator和Collections.binarySearch的Comparator必须相同,要不然没有意义。先按照某种规则进行排序,再按照该种规则进行二分搜索。
Collections.sort注释之后的输出是这个
[2]-6,[1]-6,[5]2,[4]3,[3]4,
【 在 mrcuber 的大作中提到: 】
: Collections.sort传入的Comparator和Collections.binarySearch的Comparator必须相同,要不然没有意义。先按照某种规则进行排序,再按照该种规则进行二分搜索。
Comparator必须相同,而不是注释掉不用。
【 在 xlrainy 的大作中提到: 】
: Collections.sort注释之后的输出是这个
: [2]-6,[1]-6,[5]2,[4]3,[3]4,
:
你是按照升序的规则排列,降序的规则搜索
很明显这样不一定能命中搜索目标
将Compare方法变成o1 - o2就可以了
顺便说一句,不用类型转换,autoboxing会帮你做这个事情
【 在 xlrainy 的大作中提到: 】
: 为什么按compare方法搜索返回List元素1的下表是-6,2也是-6
如果是那样的话 binarySearch(list,key)跟binarySearch(list,key,comparator)有啥区别呢
【 在 ml3615556 的大作中提到: 】
: 你是按照升序的规则排列,降序的规则搜索
: 很明显这样不一定能命中搜索目标
: 将Compare方法变成o1 - o2就可以了
: ...................