2012年10月24日 星期三

HashMap 的特徵

筆記一下 HashMap 的特徵,參考 [1] 的原理說明~
HashMap 會建立一個容器去存放 key 和 value,儲存時是利用 key 的 hashCode(繼承自 Object)去計算位置
在建立容器時,會設定一個指定的長度,長度是根據 HashMap 的 loadFactor 來決定的
如果要放的值超過目前的長度,HashMap 會拓展容器的長度,並且「重新計算所有 key 的 hash」
因此可以想見 HashMap 的拓展是非常耗時的~。
若已知資料量會很大時,最好在初始化 HashMap 時就自行指定 loadFactor,讓 HashMap 不用在事後花太多時間拓展長度。
另外 [1] 也有提到,hashMap 是無法縮小長度的,因此若 HashMap 一開始長很大,但後來會一直維持很小的長度
那麼唯一的方法就是要重建新的 HashMap,否則拓展出來的長度會一直在記憶體中維持著。

參考資料:
1、深入浅出 Java Concurrency (17): 并发容器 part 2 ConcurrentMap (2)

沒有留言: