java面试考点-HashTable/HashMap/ConcurrentHashMap

HashTable

  • 内部数据结构是数组+链表,键值对不容许为null,线程安全,可是锁是整表锁,性能较差/效率低

HashMap

  • 结构同HashTable,键值对容许为null,线程不安全,
  • 默认初始大小为16(固定为2的幂次方),
  • 默认扩容阀值为0.75,扩容方式为,先插入再扩容,因此会产生无效扩容,
  • 单个链表长度默认为8,当超过期链表自动转为红黑树结构,当树结构长度小于6时,从新转为链表

ConcurrentHashMap

  • jdk1.5以后对HashTable的升级版,性能效率各方面都有巨大的提高,
  • 在1.5-1.7版本中使用segment做为分割单元,操做过程当中会锁住segment,默认初始为16个segment,采用的是可重入锁ReentrantLock
  • 在1.8以后放弃segment,采用与HashMap相同的数据结构,Node,采用CAS机制相似乐观锁,使用3个CAS操做来确保node的一些操做的原子性,这种方式代替了锁,减少了锁的粒度,来加强并发性能
相关文章
相关标签/搜索