Java JDK 二分法 分析demo(推薦)
如下所示:
public class Test
{
public static void main(String[] args)
{
Long[] arr = new Long[100000];
for(int i =0;i<100000;i++)
{
arr[i] = (long) i;
}
System.out.println(binarySearch(arr, 3L));
Comparable midVal = (Comparable) 2L;;
System.out.println(midVal.compareTo(2l));
}
private static int binarySearch(Long[] arr, long l)
{
return binarySearch0(arr,0,arr.length,l);
}
private static int binarySearch0(Object[] a, int fromIndex, int toIndex, Object key)
{
int low = fromIndex;
int high = toIndex - 1;
while (low <= high)
{
int mid = (low + high) >>> 1;
Comparable midVal = (Comparable) a[mid];
int cmp = midVal.compareTo(key);
if (cmp < 0)
low = mid + 1;
else if (cmp > 0)
high = mid - 1;
else
return mid; // key found
}
return -(low + 1); // key not found.
}
}
算法:當(dāng)數(shù)據(jù)量很大適宜采用該方法。采用二分法查找時(shí),數(shù)據(jù)需是有序不重復(fù)的。 基本思想:假設(shè)數(shù)據(jù)是按升序排序的,對(duì)于給定值 x,從序列的中間位置開(kāi)始比較,如果當(dāng)前位置值等于 x,則查找成功;若 x 小于當(dāng)前位置值,則在數(shù)列的前半段中查找;若 x 大于當(dāng)前位置值則在數(shù)列的后半段中繼續(xù)查找,直到找到為止。
以上這篇Java JDK 二分法 分析demo(推薦)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringCloud升級(jí)2020.0.x版之OpenFeign簡(jiǎn)介與使用實(shí)現(xiàn)思路
在微服務(wù)系統(tǒng)中,我們經(jīng)常會(huì)進(jìn)行 RPC 調(diào)用。在 Spring Cloud 體系中,RPC 調(diào)用一般就是 HTTP 協(xié)議的調(diào)用。對(duì)于每次調(diào)用,都要經(jīng)過(guò)一系列詳細(xì)步驟,接下來(lái)通過(guò)本文給大家介紹SpringCloud OpenFeign簡(jiǎn)介與使用,感興趣的朋友一起看看吧2021-10-10
SpringMvc獲取請(qǐng)求頭請(qǐng)求體消息過(guò)程解析
這篇文章主要介紹了SpringMvc獲取請(qǐng)求頭請(qǐng)求體消息過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09
SpringBoot中的錯(cuò)誤處理機(jī)制源碼解析
這篇文章主要介紹了SpringBoot中的錯(cuò)誤處理機(jī)制源碼解析,springboot根據(jù)訪問(wèn)者的request中的Accept屬性來(lái)判斷要返回什么樣的數(shù)據(jù),SpringBoot存在一個(gè)錯(cuò)誤處理機(jī)制,會(huì)根據(jù)不同請(qǐng)求返回不同的結(jié)果,需要的朋友可以參考下2023-12-12
Java引用傳遞和值傳遞棧內(nèi)存與堆內(nèi)存的指向操作
這篇文章主要介紹了Java引用傳遞和值傳遞棧內(nèi)存與堆內(nèi)存的指向操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09
Java中的FutureTask實(shí)現(xiàn)代碼實(shí)例
這篇文章主要介紹了Java中的FutureTask手寫代碼實(shí)例,FutureTask是Future的實(shí)現(xiàn),用來(lái)異步任務(wù)的獲取結(jié)果,可以啟動(dòng)和取消異步任務(wù),查詢異步任務(wù)是否計(jì)算結(jié)束以及獲取最終的異步任務(wù)的結(jié)果,需要的朋友可以參考下2023-12-12
SpringBoot屬性綁定與bean屬性校驗(yàn)實(shí)現(xiàn)方法詳解
這篇文章主要介紹了SpringBoot屬性綁定與bean屬性校驗(yàn)實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2022-11-11

