




已閱讀5頁(yè),還剩2頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
java的System.currentTimeMillis()和System.nanoTime()有什么區(qū)別JDK1.5之后java中的計(jì)時(shí)給出了更精確的方法:System.nanoTime(),輸出的精度是納秒級(jí)別,這個(gè)給一些性能測(cè)試提供了更準(zhǔn)確的參考。但是這個(gè)方法有個(gè)需要注意的地方,不能用來(lái)計(jì)算今天是哪一天看到這個(gè)方法不由得會(huì)想起System.currentTime(),這個(gè)方法,它的精度是毫秒,返回值是從1970.1.1的零點(diǎn)開(kāi)始到當(dāng)前時(shí)間的毫秒數(shù),理論上這個(gè)可以用來(lái)算當(dāng)前的時(shí)間,而且可以用這個(gè)值來(lái)構(gòu)造一個(gè)Date對(duì)象。但是System.nanoTime()卻是不同,代碼注釋上有這么一句: The value returned represents nanoseconds since some fixed but arbitrary time (perhaps in the future, so values may be negative).這個(gè)返回值是一個(gè)從確定的值算起的,但是這個(gè)值是任意的,可能是一個(gè)未來(lái)的時(shí)間,所以返回值有可能是負(fù)數(shù)。(我的英語(yǔ)很蹩腳,意思應(yīng)該能明白吧)所以說(shuō)這個(gè)System.nanoTime()方法只能用來(lái)計(jì)時(shí),例如:long s = System.nanoTime();.System.out.println(System.nanoTime() - s);二分查找算法java實(shí)現(xiàn)今天看了一下JDK里面的二分法是實(shí)現(xiàn),覺(jué)得有點(diǎn)小問(wèn)題。二分法的實(shí)現(xiàn)有多種今天就給大家分享兩種。一種是遞歸方式的,一種是非遞歸方式的。先來(lái)看看一些基礎(chǔ)的東西。1、算法概念。二分查找算法也稱為折半搜索、二分搜索,是一種在有序數(shù)組中查找某一特定元素的搜索算法。請(qǐng)注意這種算法是建立在有序數(shù)組基礎(chǔ)上的。2、算法思想。搜素過(guò)程從數(shù)組的中間元素開(kāi)始,如果中間元素正好是要查找的元素,則搜素過(guò)程結(jié)束;如果某一特定元素大于或者小于中間元素,則在數(shù)組大于或小于中間元素的那一半中查找,而且跟開(kāi)始一樣從中間元素開(kāi)始比較。如果在某一步驟數(shù)組為空,則代表找不到。這種搜索算法每一次比較都使搜索范圍縮小一半。3、實(shí)現(xiàn)思路。找出位于數(shù)組中間的值,并存放在一個(gè)變量中(為了下面的說(shuō)明,變量暫時(shí)命名為temp);需要找到的key和temp進(jìn)行比較;如果key值大于temp,則把數(shù)組中間位置作為下一次計(jì)算的起點(diǎn);重復(fù) 。如果key值小于temp,則把數(shù)組中間位置作為下一次計(jì)算的終點(diǎn);重復(fù) 。如果key值等于temp,則返回?cái)?shù)組下標(biāo),完成查找。4、實(shí)現(xiàn)代碼。/* * description : 二分查找。 * autor kwzhang * modify :2012-6-29 * * param * param array 需要查找的有序數(shù)組 * param from 起始下標(biāo) * param to 終止下標(biāo) * param key 需要查找的關(guān)鍵字 * return * throws Exception */ public static E extends Comparable int binarySearch(E array, int from, int to, E key) throws Exception if (from 0 | to 0) throw new IllegalArgumentException(params from & length must larger than 0 .); if (from 1) + (to 1); / 右移即除2 E temp = arraymiddle; if (pareTo(key) 0) to = middle - 1; else if (pareTo(key) 0) from = middle + 1; else return middle; return binarySearch(array, from, to, key); 5、測(cè)試demo很簡(jiǎn)單,這里就不寫(xiě)了。上面這種實(shí)現(xiàn)是通過(guò)遞歸的方式,各人覺(jué)得之類的問(wèn)題用遞歸比較好理解,而且過(guò)程簡(jiǎn)單。下面再來(lái)看看非遞歸的方式如何實(shí)現(xiàn)。在JDK里面正好有實(shí)現(xiàn),在此就直接貼上Arrays里面的代碼。為了簡(jiǎn)單起見(jiàn),我們就只看看int參數(shù)的方法: private static int binarySearch0(int a, int fromIndex, int toIndex, int key) int low = fromIndex; int high = toIndex - 1; while (low 1; int midVal = amid; if (midVal key) high = mid - 1; else return mid; / key found return -(low + 1); / key not found. 怎樣用下面的代碼實(shí)現(xiàn)下面(1)和(2)。求大家?guī)臀已a(bǔ)充完整。(1)在程序中為數(shù)組賦值并寫(xiě)入待搜索元素,輸出搜索結(jié)果;(2)通過(guò)鍵盤為數(shù)組賦值并輸入待搜索元素,輸出搜索結(jié)果;public static int binarySearch(int a, int x, int n)int left = 0; int right = n - 1;while (left amiddle) left = middle + 1;else right = middle - 1;return -1; /由小到大排序 public static int sort(int a) for(int i=0;ia.length;i+) for(int j=0;jaj+1) int temp = aj; aj = aj+1; aj+1 = temp; return a; /回答第一題 public static int search1() /程序定義的數(shù)組 int b = 2,1,4,8,6,7,0; for(int a:b) System.out.println(a); /排序 b = sort(b); for(int a:b) System.out.println(a); return binarySearch(b,7,b.length); /回答第二題 public static int search2() Scanner sc = new Scanner(System.in); /輸入數(shù)組個(gè)數(shù) System.out.println(請(qǐng)輸入數(shù)組元素的個(gè)數(shù):); int idex = sc.nextInt(); /生成數(shù)組 int b = new intidex; /輸入元素 System.out.println(請(qǐng)輸入元素:); for(int i=0;ib.length;i+) bi = sc.nextInt(); for(int a:b) System.out.println(a); /排序 b = sort(b); for(int a:b) System.out.println(a); /輸入要查詢的元素 System.out.println(請(qǐng)輸入要查詢的元素:); int element = sc.nextInt(); return binarySearch(b,element,b.length); 任何項(xiàng)目開(kāi)發(fā)中,在一個(gè)集合或數(shù)組中循環(huán)查找,搜索目標(biāo)數(shù)據(jù),是經(jīng)常用到的。如果搜索的數(shù)據(jù)范圍比較小,那么不管什么算法,對(duì)于今天的計(jì)算機(jī)來(lái)說(shuō),性能上基本差別不大,但是如果數(shù)據(jù)量達(dá)到幾百萬(wàn),甚至更大,那么算法的選擇和優(yōu)化就顯得比較重要。有空之余測(cè)試了下順序搜索和二分搜索的性能,竟然發(fā)現(xiàn)效率差異在1500倍左右。當(dāng)然,這2種比較的前提是,集合中的數(shù)據(jù)已經(jīng)進(jìn)行了排序處理。下邊是測(cè)試代碼:/* * 搜索算法測(cè)試,主要是比較二分搜索和順序搜索的效率 * author 百里樂(lè) */public class SearchTest /* 被搜索數(shù)據(jù)的大小*/ private static final int size = 5000000;/* * 啟動(dòng)方法 * param args */ public static void main(String args) long data = new longsize; /添加測(cè)試數(shù)據(jù) for(int k =0 ;kdata.length;k+) datak = k; / 要查找的數(shù)據(jù) long target = 4980002; binaryFindTest(data,target); orderFindTest(data,target); /* * 二分搜索測(cè)試 * param data 數(shù)據(jù)集合 * param target 搜索的數(shù)據(jù) */ public static void binaryFindTest(long data, long target) long start = System.nanoTime(); int result = binaryFind(data,target); long end = System.nanoTime(); System.out.println(binary search position: + result); System.out.println(binary search time: + (end-start); /* * 順序搜索測(cè)試 * param data 數(shù)據(jù)集合 * param target 搜索的數(shù)據(jù) */ public static void orderFindTest(long data, long target) long start = System.nanoTime(); int result = orderFind(data,target); long end = System.nanoTime(); System.out.println(order search position: + result); System.out.println(order search time: + (end-start); /* * 二分搜索算法實(shí)現(xiàn) * param data 數(shù)據(jù)集合 * param target 搜索的數(shù)據(jù) * return 返回找到的數(shù)據(jù)的位置,返回-1表示沒(méi)有找到。 */ public static int binaryFind(long data, long target) int start = 0; int end = data.length - 1; while (start = datamiddleIndex) start = middleIndex + 1; else end = middleIndex - 1; return -1; /* * 順序搜索算法實(shí)現(xiàn) * param data 數(shù)據(jù)集合 * param target 搜索的數(shù)據(jù) * return 返回找到的數(shù)據(jù)的位置,返回-1表示沒(méi)有找到。 */ p
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司生涯干預(yù)活動(dòng)方案
- 公司茶舍探店活動(dòng)方案
- 2025年甘肅汽車駕駛員客運(yùn)資格證考試題
- 6 2 2向量的減法課時(shí)訓(xùn)練 高一下學(xué)期數(shù)學(xué)人教A版(2019)必修第二冊(cè)
- 培訓(xùn)課件申請(qǐng)
- 經(jīng)絡(luò)油培訓(xùn)課件
- 高檔禮品銷售培訓(xùn)課件
- 2025年江蘇省揚(yáng)州市中考化學(xué)真題 (解析版)
- 2025年湖北省中考物理試題(解析版)
- 口腔咨詢培訓(xùn)課件
- GB/T 17587.3-1998滾珠絲杠副第3部分:驗(yàn)收條件和驗(yàn)收檢驗(yàn)
- 半條被子(紅軍長(zhǎng)征時(shí)期故事) PPT
- 安徽省A10聯(lián)盟2023年高一物理第二學(xué)期期末學(xué)業(yè)質(zhì)量監(jiān)測(cè)模擬試題(含答案解析)
- JP柜出廠檢驗(yàn)記錄
- 《語(yǔ)言學(xué)綱要》學(xué)習(xí)指導(dǎo)書(shū)習(xí)題答案
- 硫酸分裝經(jīng)營(yíng)企業(yè)風(fēng)險(xiǎn)分級(jí)管控及隱患治理資料
- icao考試圖片題飛行員ICAO描述模板
- 鹽城市區(qū)第Ⅲ防洪區(qū)水環(huán)境綜合治理PPP項(xiàng)目Ⅱ標(biāo)段“6·4”一般基坑坍塌事故調(diào)查報(bào)告
- 撥叉綜合課程設(shè)計(jì)
- 學(xué)校物業(yè)服務(wù)監(jiān)督及處罰辦法
- 2012《天津市安裝工程預(yù)算基價(jià)》電氣工程(預(yù)算基價(jià)導(dǎo)出)
評(píng)論
0/150
提交評(píng)論