25
2020
04

ThreadLocal 如何解决 Hash 冲突?

与 HashMap 不同,ThreadLocalMap 结构非常简单,没有 next 引用,也就是说 ThreadLocalMap 中解决 Hash 冲突的方式并非链表的方式,而是采用线性探测的方式。所谓线性探测,就是根据初始 key 的 hashcode 值确定元素在 table 数组中的位置,如果发现这个位置上已经被其他的 key 值占用,则利用固定的算法寻找一定步长的下个位置,依次判断,直至找到能够存放的位置。


源代码实现如下:


/

 * Increment i modulo len.

 */

private static int nextIndex(int i, int len) {

    return ((i + 1 < len) ? i + 1 : 0);

}


/

 * Decrement i modulo len.

 */

private static int prevIndex(int i, int len) {

    return ((i - 1 >= 0) ? i - 1 : len - 1);

}


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。