在搜索列表时,我们经常使用indexOf方法进行搜索,Collections tool类也提供了一个检索方法binarySearch,它使用二分法来搜索指定的列表。今天我们将比较这两种检索方法。
检查法
在程序中,我们定义了一个向列表中添加五个元素的方法,然后分别通过binarySearch和indexOf方法进行搜索。你认为返回的结果会是什么?
试验结果
可以看到indexOf返回的是第一个元素的下标值,但是可以看到binarySearch检索到的值已经乱七八糟了,和请求的结果不一样。那为什么呢?我们来看看这个方法的API描述。
二进制搜索的API描述
可以看到这里已经解释过了,在调用之前,列表必须按照列表元素的自然顺序进行升序排序。二分法是“对折、对折、对折、对折”的搜索方法。如果没有排序,就无法确定是在小区域(小于中位数的区域)还是大区域(大于中位数的区域)进行搜索。那么问题就清楚了,可以有解决的办法,用Collections.sort来排序就可以解决问题了。
排序结果
所以综上所述,indexOf的使用是没有限制的。如果使用binarySearch,需要先对列表进行排序(当然排序后也有缺陷。为了找到元素,对列表进行排序,改变列表中其他元素的位置,会更容易在业务处理中出错。你也可以把它复制到一个数组中并排序。不要对原表进行排序,不会影响。IndexOf采用遍历搜索,binarySearch采用二分法搜索。性能方面,尤其是数据量大的时候,binarySearch占优势。
好了,今天就到这里。感谢您的观看。喜欢一波关注~
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。