binarySearch与IndexOf的那些事儿~
大家好,我是雄雄,今天我們來看看java中的binarySearch方法!
我們都知道,如果我們想要在一個集合中查找某個元素所在的位置時,可以使用list類自帶的indexOf方法,簡單方便還快捷。不過,Collections類也給我提供了個查找集合中元素的方法——binarySearch,但是這個方法和indexOf方法無論從檢索原理還是返回值上來說,都有很大的差距!
01
IndexOf方法
我們先來看看indexOf是怎么檢索集合內元素的,示例代碼如下:
public?static?void?main(String[] args) {Listlists = new?ArrayList();lists.add(3);lists.add(6);lists.add(8);lists.add(7);lists.add(1);System.out.println("集合中的元素:");for?(Integer str : lists) {System.out.print(str+" ");}int?index = lists.indexOf(2);System.out.println("\n2所在的位置是:"+index);}其運行結果:
下面我們再來查找一下“8”所在的位置,稍微改一下代碼:
int?index = lists.indexOf(8);其運行結果如下:
兩個案例說明不了問題,我們再來一個,比如查找一下“4”
這下很清楚,使用indexOf方法查找集合中的元素,簡單方便,如果有,返回該元素的下標(下標從0開始),如果沒有,則返回的是-1。
02
binarySearch方法
binarySearch方法采用二分法的方式來對集合元素進行檢索,二分法搜索說的簡單點,就是“折半折半再折半”!簡單,而且在效率方面要比idnexOf的方法要高出不少!下面我們就來看看binarySearch方法是如何檢索數據的。
首先,需要說明的是,使用binarySearch方法檢索(二分法)的前提是要對集合內數據進行排序,否則返回的值是不準確的!要是不排序,怎么能知道值是在比中間值小的區域或者比中間值大的區域呢?
下面我們使用代碼來看看:
public?static?void?main(String[] args) {Listlists = new?ArrayList();lists.add(3);lists.add(6);lists.add(8);lists.add(7);lists.add(1);// 原來的集合System.out.println("原來的集合:");for?(Integer str : lists) {System.out.print(str + " ");}// 對集合進行排序Collections.sort(lists);System.out.println("\n排序后的集合:");for?(Integer str : lists) {System.out.print(str + " ");}// 使用binarySearch方法查找集合中的元素int?i = Collections.binarySearch(lists, 2);System.out.println("\n2所在的位置:"?+ i);}代碼分析:集合還是原來的集合,只是我們將集合進行了簡單的升序,然后使用binarySearch方法查找集合中“2”所在的位置,indexOf方法返回的是-1,那binarySearch方法呢?
運行結果如下:
居然是-2,結果我們先保留著,我們在繼續舉例!如果查找“8”呢,結果如下:
結果是4,那我們在繼續查找“4”所在的位置,其結果如下所示:
好了,到這里已經差不多可以總結了,有同學可能會說:“老師,這沒有規律的一些返回值,怎么總結?”別著急,我們挨個來看!
01
分析1:查找“2”時,顯然集合中沒有“2”,所以必然找不到,但是返回值-2又改怎么解釋呢?大家注意看,2如果有的話,應該在哪個位置?是不是在3的位置(排序后),大于1小于3,那3所在的位置和“-2”有何關聯嗎?當你把整個集合的下標設成從1開始,3所在的位置即2,因為沒有“2”這個元素,所以返回值就是“-2”。
02
分析2:查找“8”時,集合中是存在的,返回值是4,大家把現在“8”的位置和返回值4進行關聯,總結一下是什么?那就是,當集合中存在該數時,下標是從0開始的,并且值是正數。
03
分析3:帶著分析1的結論,我們來驗證一下查找“4”。集合中是不存在4的,那如果有的話,“4”應該在6的位置,那下標從1開始,“6”所在的位置就是3,又因為集合中沒有,所以是負數!
以上就是關于indexOf和binarySearch方法的總結,是不是慶幸自己又學會了一點啦!
往期精彩
新機必裝!那些你不知道的實用技軟件在這里!文末免費獲取
2020-10-31
自從有了這款辣椒醬,拌飯再也不用老干媽
2020-10-30
如何使用bootstrap實現輪播圖?
2020-10-29
班級日常分享:一天一瞬間!
2020-10-29
中流擊水,浪遏飛舟
2020-10-28
王寶興:秋運會
2020-10-27
高啟航:秋運會!
2020-10-26
點分享
點點贊
點在看
總結
以上是生活随笔為你收集整理的binarySearch与IndexOf的那些事儿~的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑配置低,越用越卡怎么办?
- 下一篇: Java中的binarySearch方法