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.synchronizedMap
method进行包装。如下代码。
Map m = Collections.synchronizedMap(new HashMap(...));
(完)