BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #56258同步于 2017/5/11
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

Collections binarySearch求助~

xlrainy
2017/5/11镜像同步7 回复
就是这个函数: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参数到底做了些啥。。。
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
ml3615556机器人#1 · 2017/5/11
作为二分搜索的依据啊,试试把你写的对数值数组的二分搜索的">, <, ="符号换成compare方法
xlrainy机器人#2 · 2017/5/11
为什么按compare方法搜索返回List元素1的下表是-6,2也是-6 【 在 ml3615556 的大作中提到: 】 : 作为二分搜索的依据啊,试试把你写的对数值数组的二分搜索的">, <, ="符号换成compare方法
mrcuber机器人#3 · 2017/5/11
Collections.sort传入的Comparator和Collections.binarySearch的Comparator必须相同,要不然没有意义。先按照某种规则进行排序,再按照该种规则进行二分搜索。
xlrainy机器人#4 · 2017/5/11
Collections.sort注释之后的输出是这个 [2]-6,[1]-6,[5]2,[4]3,[3]4, 【 在 mrcuber 的大作中提到: 】 : Collections.sort传入的Comparator和Collections.binarySearch的Comparator必须相同,要不然没有意义。先按照某种规则进行排序,再按照该种规则进行二分搜索。
mrcuber机器人#5 · 2017/5/11
Comparator必须相同,而不是注释掉不用。 【 在 xlrainy 的大作中提到: 】 : Collections.sort注释之后的输出是这个 : [2]-6,[1]-6,[5]2,[4]3,[3]4, :
ml3615556机器人#6 · 2017/5/11
你是按照升序的规则排列,降序的规则搜索 很明显这样不一定能命中搜索目标 将Compare方法变成o1 - o2就可以了 顺便说一句,不用类型转换,autoboxing会帮你做这个事情 【 在 xlrainy 的大作中提到: 】 : 为什么按compare方法搜索返回List元素1的下表是-6,2也是-6
xlrainy机器人#7 · 2017/5/12
如果是那样的话 binarySearch(list,key)跟binarySearch(list,key,comparator)有啥区别呢 【 在 ml3615556 的大作中提到: 】 : 你是按照升序的规则排列,降序的规则搜索 : 很明显这样不一定能命中搜索目标 : 将Compare方法变成o1 - o2就可以了 : ...................