面试题一:HashMap、Hashtable、ConcurrentHashMap的区别

943 阅读1分钟

这个面试题,虽然很老套,但是常年开发一味的在业务上盘旋,已经将所有的基础知识还给了老师,在此向当年教我的Java老师们说声“对不起”。

好了,就哔哔一下。开始进入正题


  1. HashMap和Hashtable的区别。
    1. HashMap线程不安全的,Hashtable是线程安全的(方法上使用了synchronized关键字)
    2. HashMap允许键值对都可以为null, 而Hashtable不允许键值对为null
    3. HashMap由数组+链表/红黑树,而Hashtable依然使用数组+链表
  2. Hashtable与ConcurrentHashMap的区别。
    1. Hashtable在进行元素操作的时候,是锁住整个table,而jdk1.7中的ConcurrentHashMap是采用分段的分式,锁住某个段,而jdk1.8之后去除了“分段锁”,而是改成了局部同步代码块,且是锁住的是某个Node节点,这样其他槽里的节点依然可以并发进行操作。
    2. Hashtable和ConcurrentHashMap一样不允许键值对为null