HashMap原理分析

未专门声明的情况,都是 1.8 的代码。

hash函数

确定桶的算法:

1
i = (n - 1) & hash

本质是为了将 hash 这个 int 通过取模,获得一个数组上的一个位置,这个获取需要均匀,等价于 i = hash % n。有点类似数据库分库分表的路由算法。

在 n 为 2 的 n 次方时,i = (n - 1) & hash 等价于 i = hash % n。并且性能更好,位运算比求余计算性能更好。

那么为什么在 n 为 2 的 N 次方时,i = (n - 1) & hash 等价于 i = hash % n?

Read More ...

dubbo ExtensionLoader 解析

简介

1
Codec2 codec2 = ExtensionLoader.getExtensionLoader(Codec2.class).getExtension(codecName)

SPI 注解,作为扩展接口 interface 都会标注 SPI 注解,value 标注的是默认使用的 provider:

1
2
3
4
5
6
7
@Target({ElementType.TYPE})
public @interface SPI {
/**
* default extension name
*/
String value() default "";
}

Read More ...