17. 介绍一下ConcurrentHashMap是怎么实现的?(⭐⭐⭐⭐⭐

【Java面试】面试被问:ConcurrentHashMap 底层实现原理?高手的回答堪称完美_哔哩哔哩_bilibili

JDK 1.7中的实现:

在 jdk 1.7 中,ConcurrentHashMap 是由 Segment 数据结构和 HashEntry 数组结构构成采取分段锁来保证安全性。Segment 是 ReentrantLock 重入锁,在 ConcurrentHashMap 中扮演锁的角色,HashEntry 则用于存储键值对数据。一个 ConcurrentHashMap 里包含一个 Segment 数组,一个 Segment 里包含一个 HashEntry 数组,Segment 的结构和 HashMap 类似,是一个数组和链表结构。

JDK 1.8中的实现:

Untitled

关于这个问题,我从三方面进行回答:

  1. ConcurrentHashMap的整体架构

ConcurrentHashMap本质上也是一个HashMap,在JDK1.8 的实现是由 数组+单链表+红黑树的数据结构来实现。开始的时候创建一个长度为16的数组。当发生Hash冲突时,HashMap使用拉链法解决,就是在node.next = new Node()。当这个链表长过长就会将链表整理为红黑树、当链表长度过小,红黑树有退化成单链表。

  1. ConcurrentHashMap的并发安全实现

并发控制使用Synchronized 对单链表的头节点进行加锁进行实现。由于每次加锁只锁住某个节点,所以性能很好。

1. Java中有哪些容器(集合类)?(⭐⭐

Java中的集合类主要由Collection和Map这两个接口派生而出,其中Collection接口又派生出三个子接口,分别是Set、List、Queue。其中

这些接口拥有众多的实现类,其中最常用的实现类有HashSet、ArrayList、LinkedList、ArrayDeque、HashMap等。