V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
redtea
V2EX  ›  Java

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

  •  
  •   redtea · 2016-02-19 20:12:19 +08:00 · 3066 次点击
    这是一个创建于 3001 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    15 条回复    2016-02-22 09:44:45 +08:00
    rogerchen
        1
    rogerchen  
       2016-02-19 20:16:41 +08:00
    You do not pay for what you do not need.
    publicID002
        2
    publicID002  
       2016-02-19 20:24:12 +08:00
    不然呢?每次都检查下是否是排序的,没排的话排一下?不说效率, binarySearch 这个方法里修改了数组是一个好的设计吗?
    echo1937
        3
    echo1937  
       2016-02-19 20:33:41 +08:00
    这个锅 Java 不背啊,叔叔,我们不背。
    billlee
        4
    billlee  
       2016-02-19 21:27:03 +08:00
    函数名应该和功能相符
    sengxian
        5
    sengxian  
       2016-02-19 21:43:04 +08:00
    那样复杂度就是 O(nlogn) 的了,完全没有二分搜索的意义了啊。
    FrankFang128
        6
    FrankFang128  
       2016-02-19 21:48:17 +08:00 via Android
    SortAndBinarySearch 才是你想要的
    iyangyuan
        7
    iyangyuan  
       2016-02-20 05:54:16 +08:00 via iPhone
    解耦
    zhjits
        8
    zhjits  
       2016-02-20 10:28:14 +08:00
    应该有一个继承 Array 类的 SortedArray 类,然后实现 SortedArray.binarySearch 方法
    tchekai704
        9
    tchekai704  
       2016-02-20 15:48:07 +08:00 via iPhone
    一个方法只做它申明的,不做多余的。 binarySearch 和 sort 有一毛钱关系吗?
    sweelia
        10
    sweelia  
       2016-02-20 16:08:04 +08:00 via Android
    实际上,二分查找不应该改变原始数据。是只读的。如果你确信原始数据可以被改动,那就先排序再给它吧。
    SoloCompany
        11
    SoloCompany  
       2016-02-20 18:46:53 +08:00 via iPhone
    其实你需要的函数名字叫做 linearSearch
    snnn
        12
    snnn  
       2016-02-20 21:51:45 +08:00
    binarySearch 这个方法很少很少用。楼主还是描述下你的使用场景吧,我怀疑你改完后还是错的。
    Honwhy
        13
    Honwhy  
       2016-02-20 23:17:26 +08:00
    @FrankFang128 SortAndBinarySearch 这一个函数有两个职责,不太符合职责单一原则。
    事实我写过很多 xxAndyy 的函数,后续改起来感觉耦合很多
    h4x3rotab
        14
    h4x3rotab  
       2016-02-21 11:07:12 +08:00 via iPhone
    就是为了排一次序搜索多次才要分两步,就搜索一次,扫一遍都比排序快
    thinkmore
        15
    thinkmore  
       2016-02-22 09:44:45 +08:00
    所见即所知
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5078 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 09:48 · PVG 17:48 · LAX 02:48 · JFK 05:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.