HashMap的小優化

HashMap是我們平日內用的非常多的集合框架,網上介紹有很多的實現原理,在存放數據數量已知的情況下,我們可以在構建hashmap的時候指定其容量,減少擴展空間時消耗的時間。下面看一個例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import java.util.HashMap;
import java.util.Map;

/**
 * HashMap測試
 * 
 * @author YD
 *
 */

public class MapTest {
    public static void main(String[] args) {
        int num = 10000;  //數據容量
        Map<Integer, String> map1 = new HashMap<Integer, String>();
        Map<Integer, String> map2 = new HashMap<Integer, String>(num);
        Map<Integer, String> map3 = new HashMap<Integer, String>(num * 2);

        long time1 = System.currentTimeMillis();
        for (int i = 0; i < num; i++)
            map1.put(i, "haha");
        long time2 = System.currentTimeMillis();
        for (int i = 0; i < num; i++)
            map2.put(i, "haha");
        long time3 = System.currentTimeMillis();
        for (int i = 0; i < num; i++)
            map3.put(i, "haha");
        long time4 = System.currentTimeMillis();
        System.out.println("map1 time: " + (time2 - time1) + "ms");
        System.out.println("map2 time: " + (time3 - time2) + "ms");
        System.out.println("map3 time: " + (time4 - time3) + "ms");
    }
}

在數據量爲10000的時候,多次測試,得出的較多的結果是

1
2
3
map1 time: 14ms
map2 time: 9ms
map3 time: 4ms

在數據量爲100000的時候,結果如下

1
2
3
map1 time: 31ms
map2 time: 16ms
map3 time: 9ms

如果數據量更大的時候,升值1000000(一百萬)時,結果如下

1
2
3
map1 time: 119ms
map2 time: 47ms
map3 time: 59ms

數據量再增加10倍後(一千萬),結果如下

1
2
3
map1 time: 7718ms
map2 time: 1035ms
map3 time: 2156ms

可以看出,當我們預先知道數據量的時候,在構建hashmap的時候指定數據容量,可以在數據量大的時候減少消耗時間。指定數據容量時,不應該過多的分配空間。


更多文章請訪問小胖軒.

發佈了117 篇原創文章 · 獲贊 23 · 訪問量 90萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章