ConcurrentHashMap 和 HashMap的区别

📅 2026/7/2 10:39:10
ConcurrentHashMap 和 HashMap的区别
面试口述版线程安全性:HashMap线程不安全,并发put会出现数据覆盖,JDK7扩容会形成环形链表造成死循环;ConcurrentHashMap是线程安全的,适用于多线程场景。锁机制:JDK8:HashMap无锁;ConcurrentHashMap采用CAS+synchronized锁住链表头节点,锁粒度细。JDK7:ConcurrentHashMap使用Segment分段锁。Null值:HashMap允许一个key为null,value可以多个null;ConcurrentHashMap key、value都不允许为null,并发场景无法区分值为空还是键不存在。迭代器:HashMap迭代器是fail‑fast,并发修改直接抛出ConcurrentModificationException;ConcurrentHashMap是弱一致性,遍历期间新增数据不会报错。扩容:HashMap仅单线程扩容;ConcurrentHashMap支持并发扩容,其他线程可以协助迁移数据,效率更高。性能:单线程下HashMap更快,没有CAS和锁的开销;多线程环境必须使用ConcurrentHashMap。精简版(直接背)HashMap线程不安全,允许key、value存null,单线程扩容,迭代器快速失败。ConcurrentHashMap线程安全,JDK8使用CAS+synchronized,不允许存null,支持并发扩容,迭代器弱一致,用于多线程环境。表格版(复盘记忆)对比项HashMapConcurrentHashMap线程安全不安全安全