Java數(shù)組使用binarySearch()方法查找指定元素的實(shí)現(xiàn)
查找數(shù)組是指從數(shù)組中查詢指定位置的元素,或者查詢某元素在指定數(shù)組中的位置。使用 Arrays 類的 binarySearch() 方法可以實(shí)現(xiàn)數(shù)組的查找,該方法可使用二分搜索法來(lái)搜索指定數(shù)組,以獲得指定對(duì)象,該方法返回要搜索元素的索引值。
binarySearch() 方法有多種重載形式來(lái)滿足不同類型數(shù)組的查找需要,常用的重載形式有兩種。
(1) 第一種形式如下:
binarySearch(Object[] a,Object key);
其中,a 表示要搜索的數(shù)組,key 表示要搜索的值。如果 key 包含在數(shù)組中,則返回搜索值的索引;否則返回 -1 或“-插入點(diǎn)”。插入點(diǎn)指搜索鍵將要插入數(shù)組的位置,即第一個(gè)大于此鍵的元素索引。
在進(jìn)行數(shù)組查詢之前,必須對(duì)數(shù)組進(jìn)行排序(可以使用 sort() 方法)。如果沒(méi)有對(duì)數(shù)組進(jìn)行排序,則結(jié)果是不確定的。如果數(shù)組包含多個(gè)帶有指定值的元素,則無(wú)法確認(rèn)找到的是哪一個(gè)。
例 1
聲明 double 類型的 score 數(shù)組,接著調(diào)用 Arrays 類的 sort() 方法對(duì) score 數(shù)組排序,排序后分別查找數(shù)組中值為 100 和 60 的元素,分別將結(jié)果保存到 index1 和 index2 變量中,最后輸出變量的值。代碼如下:
public static void main(String[] args) { double[] score = { 99.5, 100, 98, 97.5, 100, 95, 85.5, 100 }; Arrays.sort(score); int index1 = Arrays.binarySearch(score, 100); int index2 = Arrays.binarySearch(score, 60); System.out.println("查找到 100 的位置是:" + index1); System.out.println("查找到 60 的位置是:" + index2); }
執(zhí)行上述代碼,輸出結(jié)果如下:
查找到 100 的位置是:5
查找到 60 的位置是:-1
(2) 除了上述形式外,binarySearch() 還有另一種常用的形式,這種形式用于在指定的范圍內(nèi)查找某一元素。語(yǔ)法如下:
binarySearch(Object[] a,int fromIndex,int toIndex,Object key);
其中,a 表示要進(jìn)行查找的數(shù)組,fromIndex 指定范圍的開(kāi)始處索引(包含開(kāi)始處),toIndex 指定范圍的結(jié)束處索引(不包含結(jié)束處),key 表示要搜索的元素。
在使用 binarySearch() 方法的上述重載形式時(shí),也需要對(duì)數(shù)組進(jìn)行排序,以便獲取準(zhǔn)確的索引值。如果要查找的元素 key 在指定的范圍內(nèi),則返回搜索鍵的索引;否則返回 -1 或 “-插入點(diǎn)”。插入點(diǎn)指要將鍵插入數(shù)組的位置,即范圍內(nèi)第一個(gè)大于此鍵的元素索引。
例 2
對(duì)例 1 中創(chuàng)建的 score 數(shù)組進(jìn)行查找元素,指定開(kāi)始位置為 2,結(jié)束位置為 6。代碼如下:
public static void main(String[] args) { double[] score = {99.5,100,98,97.5,100,95,85.5,100}; Arrays.sort(score); int index1 = Arrays.binarySearch(score,2,6,100); int index2 = Arrays.binarySearch(score,2,6,60); System.out.println("查找到 100 的位置是:"+index1); System.out.println("查找到 60 的位置是:"+ index2); }
執(zhí)行上述代碼,輸出結(jié)果如下:
查找到 100 的位置是:5
查找到 60 的位置是:-3
注意:實(shí)現(xiàn)對(duì)數(shù)組進(jìn)行查找的方法很多,但是使用 Arrays 對(duì)象的 binarySearch() 方法是最簡(jiǎn)單、最方便的一種,因此該方法經(jīng)常被應(yīng)用。關(guān)于其他的查找方法這里不再演示,感興趣的讀者可以動(dòng)手試一試。
到此這篇關(guān)于Java數(shù)組使用binarySearch()方法查找指定元素的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Java binarySearch查找指定元素內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
在Spring中利用@Order注解對(duì)bean和依賴進(jìn)行排序
在Spring框架中,@Order是一個(gè)經(jīng)常被忽視但非常重要的注解,在項(xiàng)目開(kāi)發(fā)中,當(dāng)我們需要維護(hù)bean的特定順序或者存在許多相同類型的bean時(shí),這個(gè)注解就發(fā)揮了作用,這篇文章講的就是如何利用@Order注解對(duì)bean和依賴進(jìn)行排序,需要的朋友可以參考下2023-11-11Java中new關(guān)鍵字和newInstance方法的區(qū)別分享
在初始化一個(gè)類,生成一個(gè)實(shí)例的時(shí)候,newInstance()方法和new關(guān)鍵字除了一個(gè)是方法一個(gè)是關(guān)鍵字外,最主要的區(qū)別是創(chuàng)建對(duì)象的方式不同2013-07-07Mybatis實(shí)現(xiàn)自定義類型轉(zhuǎn)換器TypeHandler的方法
Mybatis實(shí)現(xiàn)自定義的轉(zhuǎn)換器非常的簡(jiǎn)單,只需要三步就可以實(shí)現(xiàn)自定義類型轉(zhuǎn)換器TypeHandler,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起看下吧2016-07-07Java基于正則實(shí)現(xiàn)的日期校驗(yàn)功能示例
這篇文章主要介紹了Java基于正則實(shí)現(xiàn)的日期校驗(yàn)功能,涉及java文件讀取、日期轉(zhuǎn)換及字符串正則匹配相關(guān)操作技巧,需要的朋友可以參考下2017-03-03Java多線程中關(guān)于join方法的使用實(shí)例解析
本文通過(guò)實(shí)例代碼給大家實(shí)例介紹了Java多線程中關(guān)于join方法的使用,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下2017-01-01項(xiàng)目總結(jié)之HttpURLConnection的disconnect的問(wèn)題
這篇文章主要介紹了項(xiàng)目總結(jié)之HttpURLConnection的disconnect的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06解決Unable to start embedded container&nbs
這篇文章主要介紹了解決Unable to start embedded container SpringBoot啟動(dòng)報(bào)錯(cuò)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07JavaWeb中導(dǎo)出excel文件的簡(jiǎn)單方法
下面小編就為大家?guī)?lái)一篇JavaWeb中導(dǎo)出excel文件的簡(jiǎn)單方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-10-10