HashMap HashTable ConcurrentHashMap的区别
HshMap
HashMap是一个异步式线程线程不安全的映射,底层是基于数组+链表实现的。在存储的时候,键值对允许存储null值。
HashMap 默认的初始容量是16,在进行散列的时候,会首先对键进行哈希化,然后第二步将哈希化的值进行第二次计算,会散列到对用的桶中,当后续有其他的值也进入到这个桶中,桶中的数据会以链表的形式进行存储。
HashMap的默认加载因子是0.75f,每次的扩容量是原来的一倍(16–32)。如果指定初始容量x, 那么x如果在(2n-1,2n],初始容量一定是2n。
HashTable
HashTable是一个同步时线程安全的映射,默认的初始容量是11,加载因子是0.75f,每次扩容是在原有的基础上增加一倍+1(11–23),存在的键值对不允许为null
ConcurrentHashMap
ConcurrentHashMap是一个异步式线程安全的映射,使用的是分段锁机制。速度理论情况下是Hashtable的16倍