HashMap要注意的两个点

这篇是写给自己看的。总结jdk的HashMap实现。

HashMap需要注意的两个点是

  • 构造函数的参数load factor有啥用?
  • HashMap是线程不安全的。

load factor

HashMap的构造函数。

public HashMap(int initialCapacity, float loadFactor)

其中 initialCapacity 是Map的初始容量,很好理解。那 loadFactor 是什么含义呢?下面举个例子解释一下。

假设initialCapacity=16,loadFactor=0.75。那么当Map中存放的key数量达到16*0.75=12个时,Map的容量就翻倍,变成32。所以loadFactor的作用就是指定Map容量翻倍的时机,当Map实际存放entry的数量达到initialCapacity*loadFactor时,容量就翻倍。

实际上initialCapacity=16,loadFactor=0.75是HashMap默认的参数。

HashMap是线程不安全的

jdk中HashMap的实现是线程不安全的,意思就是如果多线程对HashMap对象进行访问,可能出问题。

想变成线程安全的话,需要在创建HashMap对象时用Collections.synchronizedMapmethod进行包装。如下代码。

Map m = Collections.synchronizedMap(new HashMap(...));

(完)

posted on 2016-03-13 12:09  lima  阅读(727)  评论(0编辑  收藏  举报

导航