1.HashMap 允许key和value为空 ,非线程安全。创建的时候通常常用默认的构造方法,其他的构造方法也可以自己去设置初始大小和负载因子,不设置的话初始值大小为16,设置的话应为2的
1.HashMap
允许key和value为空 ,非线程安全。创建的时候通常常用默认的构造方法,其他的构造方法也可以自己去设置初始大小和负载因子,不设置的话初始值大小为16,设置的话应为2的n次幂,最大是2的30次幂,如果设置的不是2的n次幂则会往上去离他最近的2的n次幂。
2.HashTable
不允许key和value为空。初始容量为11,扩容时。以原来的二倍➕1进行扩容,是线程安全的,每个方法都有synchronized修饰,但是性能并不高。
3.concurrentHashMap
实现了concurrentMap接口,concurrentMap又实现了,Map 接口。所以concurrentHashMap也是Map的一种实现。他的大小和扩容机制都和HashMap一样,区别在于put的时候为了线程安全会加锁,但是不是像HashTable那样整体加锁,而是对key对应的node加锁,这样如果两个线程同时put,如果根据key计算的位置不同是完全不影响的,只有两个key经过hash扰动并求模后的值仍然一样时才会等待
作者:KJ.JK