- Java開發(fā)之道
- 張振坤 李鐘尉 陳丹丹等編著
- 543字
- 2018-12-27 19:54:02
謬誤19 恰恰相反——頻繁查詢數(shù)組比HashMap快
很多程序員認(rèn)為,在進(jìn)行數(shù)據(jù)的頻繁查詢時(shí),二維數(shù)組比HashMap速度快,其實(shí)這種說法是錯誤的,接下來通過兩個示例進(jìn)行說明。
示例:
public class FromArrayQuery { public static void main (String[] args) { String[][] arr = new String[1024*250][2] ; // 創(chuàng)建字符串?dāng)?shù)組 for (int i = 0; i < 1024*250; i++){ arr[i][0] = String.valueOf(i); // 在數(shù)組中存儲數(shù)據(jù) arr[i][1] = String.valueOf(i); // 在數(shù)組中存儲數(shù)據(jù) } long startTime = System.currentTimeMillis(); // 獲得執(zhí)行for循環(huán)之前的當(dāng)前時(shí)間,單位為毫秒 for (int i = 0; i < 1024*250; i++){ if (arr[i][0]. equals (String.valueOf(1024*250 - 1))){// 查詢滿足條件的元素 System.out. println ("從數(shù)組中查詢到:"+arr[i][0]); // 輸出查詢結(jié)果 } } long endTime = System.currentTimeMillis(); // 獲得執(zhí)行for循環(huán)之后的當(dāng)前時(shí)間 long useTime = endTime - startTime; // 計(jì)算出執(zhí)行for循環(huán)所用的時(shí)間 System.out. println ("查詢用時(shí)為:"+useTime); } }
運(yùn)行本示例,效果如圖4.19所示。

圖4.19 從數(shù)組中查詢需要的時(shí)間
示例:
import java. util. HashMap; public class FromHashMapQuery { public static void main (String[] args) { HashMap<String, String> map = new HashMap<String, String>(); // 創(chuàng)建HashMap對象 for (int i = 0; i < 1024*500; i++){ map. put (String.valueOf(i), String.valueOf(i)); // 在HashMap中存儲數(shù)據(jù) } long startTime = System.currentTimeMillis(); // 獲得執(zhí)行for循環(huán)之前的當(dāng)前時(shí)間,單位為毫秒 String qResult = map. get (String.valueOf(1024*250-1)); // 從HashMap中查詢指定鍵的值 System.out. println ("從HashMap中查詢到:"+qResult) ; // 輸出查詢結(jié)果 long endTime = System.currentTimeMillis() ; // 獲得執(zhí)行for循環(huán)之后的當(dāng)前時(shí)間 long useTime = endTime - startTime; // 計(jì)算出執(zhí)行for循環(huán)所用的時(shí)間 System.out. println ("查詢用時(shí)為:"+useTime); } }
運(yùn)行本示例,效果如圖4.20所示。

圖4.20 從HashMap中查詢需要的時(shí)間
說明
從如圖4.19和圖4.20所示的輸出結(jié)果可以看出,從存儲元素個數(shù)相同的數(shù)組和HashMap中查詢數(shù)據(jù),HashMap要比數(shù)組快,因此要頻繁地查詢數(shù)據(jù),應(yīng)該使用HashMap,而不要使用數(shù)組。
推薦閱讀
- Python程序設(shè)計(jì)(第3版)
- 深入淺出Spring Boot 2.x
- 深入淺出Windows API程序設(shè)計(jì):編程基礎(chǔ)篇
- Django Design Patterns and Best Practices
- Mastering Ubuntu Server
- Learning Apache Mahout Classification
- MATLAB 2020從入門到精通
- Python機(jī)器學(xué)習(xí)算法: 原理、實(shí)現(xiàn)與案例
- Visual Basic程序設(shè)計(jì)上機(jī)實(shí)驗(yàn)教程
- Python全棧數(shù)據(jù)工程師養(yǎng)成攻略(視頻講解版)
- uni-app跨平臺開發(fā)與應(yīng)用從入門到實(shí)踐
- Instant Zurb Foundation 4
- jQuery從入門到精通(微課精編版)
- Java Web開發(fā)教程:基于Struts2+Hibernate+Spring
- Using Yocto Project with BeagleBone Black