ConcurrentHashMap jdk 8使用TreeNodes代替List ..为什么?


问题内容

嗨,我知道ConcurrentHashMapJDK 8之前的工作原理。我也理解了代码:它是模块化的,而且很难理解。

ConcurrentHashMapJDK 8中的代码与以前的实现相比已发生了很大变化。

由于此问题被归类为过于广泛,因此我现在将尝试非常具体。

CHMv8使用TreeBin(RedBlackTree的变体)存储桶,而不是使用链表。

所以我的问题是使用TreeBin而不是链接列表的主要优点是什么?

源代码在这里


问题答案:

主要更改是添加ConcurrentHashMap了新Java
8默认Map方法的特定实现,并具有依赖于内部细节的更好的并发实现。这些更改需要大量新的内部类,这些内部类使.java文件膨胀

例如,其中一些方法包括:

计算(K键,BiFunction
remappingFunction)

forEach(BiConsumer操作)

合并(K键,V值,BiFunction
remappingFunction)

仅举几个。

我认为这也说明了为什么您通常不必关心无需维护类的工作方式的实现细节。只要该类遵循其javadoc中规定的约定,您就应该对它的工作方式不可知,因为将来实现的详细信息可能会更改。