上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
谬误19 恰恰相反——频繁查询数组比HashMap快
很多程序员认为,在进行数据的频繁查询时,二维数组比HashMap速度快,其实这种说法是错误的,接下来通过两个示例进行说明。
示例:
public class FromArrayQuery { public static void main (String[] args) { String[][] arr = new String[1024*250][2] ; // 创建字符串数组 for (int i = 0; i < 1024*250; i++){ arr[i][0] = String.valueOf(i); // 在数组中存储数据 arr[i][1] = String.valueOf(i); // 在数组中存储数据 } long startTime = System.currentTimeMillis(); // 获得执行for循环之前的当前时间,单位为毫秒 for (int i = 0; i < 1024*250; i++){ if (arr[i][0]. equals (String.valueOf(1024*250 - 1))){// 查询满足条件的元素 System.out. println ("从数组中查询到:"+arr[i][0]); // 输出查询结果 } } long endTime = System.currentTimeMillis(); // 获得执行for循环之后的当前时间 long useTime = endTime - startTime; // 计算出执行for循环所用的时间 System.out. println ("查询用时为:"+useTime); } }
运行本示例,效果如图4.19所示。
图4.19 从数组中查询需要的时间
示例:
import java. util. HashMap; public class FromHashMapQuery { public static void main (String[] args) { HashMap<String, String> map = new HashMap<String, String>(); // 创建HashMap对象 for (int i = 0; i < 1024*500; i++){ map. put (String.valueOf(i), String.valueOf(i)); // 在HashMap中存储数据 } long startTime = System.currentTimeMillis(); // 获得执行for循环之前的当前时间,单位为毫秒 String qResult = map. get (String.valueOf(1024*250-1)); // 从HashMap中查询指定键的值 System.out. println ("从HashMap中查询到:"+qResult) ; // 输出查询结果 long endTime = System.currentTimeMillis() ; // 获得执行for循环之后的当前时间 long useTime = endTime - startTime; // 计算出执行for循环所用的时间 System.out. println ("查询用时为:"+useTime); } }
运行本示例,效果如图4.20所示。
图4.20 从HashMap中查询需要的时间
说明
从如图4.19和图4.20所示的输出结果可以看出,从存储元素个数相同的数组和HashMap中查询数据,HashMap要比数组快,因此要频繁地查询数据,应该使用HashMap,而不要使用数组。