为什么 Arrays.binarySearch 方法里不对数组进行排序,却要先单独调用 Arrays.sort 方法?

2016-02-19 20:12:19 +08:00
 redtea

今天遇到以前同事写的一个坑,数组没有先排序,所以在数组里查找结果就不对了。我刚刚检查代码时也没有注意到这一点, debug 后这才想起要先排序。

3089 次点击
所在节点    Java
15 条回复
rogerchen
2016-02-19 20:16:41 +08:00
You do not pay for what you do not need.
publicID002
2016-02-19 20:24:12 +08:00
不然呢?每次都检查下是否是排序的,没排的话排一下?不说效率, binarySearch 这个方法里修改了数组是一个好的设计吗?
echo1937
2016-02-19 20:33:41 +08:00
这个锅 Java 不背啊,叔叔,我们不背。
billlee
2016-02-19 21:27:03 +08:00
函数名应该和功能相符
sengxian
2016-02-19 21:43:04 +08:00
那样复杂度就是 O(nlogn) 的了,完全没有二分搜索的意义了啊。
FrankFang128
2016-02-19 21:48:17 +08:00
SortAndBinarySearch 才是你想要的
iyangyuan
2016-02-20 05:54:16 +08:00
解耦
zhjits
2016-02-20 10:28:14 +08:00
应该有一个继承 Array 类的 SortedArray 类,然后实现 SortedArray.binarySearch 方法
tchekai704
2016-02-20 15:48:07 +08:00
一个方法只做它申明的,不做多余的。 binarySearch 和 sort 有一毛钱关系吗?
sweelia
2016-02-20 16:08:04 +08:00
实际上,二分查找不应该改变原始数据。是只读的。如果你确信原始数据可以被改动,那就先排序再给它吧。
SoloCompany
2016-02-20 18:46:53 +08:00
其实你需要的函数名字叫做 linearSearch
snnn
2016-02-20 21:51:45 +08:00
binarySearch 这个方法很少很少用。楼主还是描述下你的使用场景吧,我怀疑你改完后还是错的。
Honwhy
2016-02-20 23:17:26 +08:00
@FrankFang128 SortAndBinarySearch 这一个函数有两个职责,不太符合职责单一原则。
事实我写过很多 xxAndyy 的函数,后续改起来感觉耦合很多
h4x3rotab
2016-02-21 11:07:12 +08:00
就是为了排一次序搜索多次才要分两步,就搜索一次,扫一遍都比排序快
thinkmore
2016-02-22 09:44:45 +08:00
所见即所知

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/257742

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX