前段时间遇到这个问题,当时不知道答案,昨天实验了一下,记录一下。
建了一个Java程序,所以首先看看 Main 方法:
public final static int i = (int) (0.5 * 10000);
public static Long startTime = (long) 0;
public static int tag = 0;
static ArrayList<Integer> longArray = new ArrayList<Integer>();
static Map<Integer, Integer> longMap = new HashMap<Integer, Integer>();
/**
* @param args
*/
public static void main(String[] args) {
putData();
getData();
}
再看看 putData() 、 getData() 两个方法:
public static void putData() {
// ArrayList 插入
tag = i;
startTime = System.currentTimeMillis();
for (; tag > 0; tag--) {
longArray.add(tag);
}
System.out.println(" longArray time "
+ (System.currentTimeMillis() - startTime) + " == "
+ longArray.size());
// Map 插入
tag = i;
startTime = System.currentTimeMillis();
for (; tag > 0; tag--) {
longMap.put(tag, tag);
}
System.out.println(" longMap time "
+ (System.currentTimeMillis() - startTime) + " == "
+ longMap.size());
}
public static void getData() {
// ArrayList 读取
startTime = System.currentTimeMillis();
for (Integer flag1 : longArray) {
}
System.out.println(" longArray time "
+ (System.currentTimeMillis() - startTime) + " == "
+ longArray.size());
// Map 读取
startTime = System.currentTimeMillis();
for (Entry<Integer, Integer> flag2 : longMap.entrySet()) {
}
System.out.println(" longMap time "
+ (System.currentTimeMillis() - startTime) + " == "
+ longMap.size());
}
下面看看不同数据量的时候,他们各自的表现:
// 1 * 10000
longArray time 2 == 10000
longMap time 5 == 10000
longArray time 3 == 10000
longMap time 1 == 10000
// 10 * 10000
longArray time 8 == 100000
longMap time 16 == 100000
longArray time 9 == 100000
longMap time 6 == 100000
// 50 * 10000
longArray time 17 == 500000
longMap time 65 == 500000
longArray time 14 == 500000
longMap time 15 == 500000
// 100 * 10000
longArray time 21 == 1000000
longMap time 117 == 1000000
longArray time 16 == 1000000
longMap time 18 == 1000000
// 1000 * 10000
longArray time 5185 == 10000000
longMap time 7687 == 10000000
longArray time 39 == 10000000
longMap time 115 == 10000000
从上面的数据可以推出 插入速度ArrayList 表现的比 Map更快,
在读取方面数据量比较小的时候Map 和 ArrayList 的表现相差不大(100 * 10000),数量级比较大的时候ArrayList 表现的比Map 更快。
如有错误,欢迎指正!
email : 704084109@qq.com