你知道HashMap在高并发下可能会出现哪些问题吗( 二 )

对照源码分析一下具体的put操作是如何完成的:

你知道HashMap在高并发下可能会出现哪些问题吗

涉及到的几个方法:

static int hash(int h) { h ^= (h >>> 20) ^ (h >>> 12); return h ^ (h >>> 7) ^ (h >>> 4);}static int indexFor(int h, int length) { return h & (length-1);}

数据put完成以后,就是如何get,我们看一下get函数中的操作:

你知道HashMap在高并发下可能会出现哪些问题吗

看一下链表的结点数据结构,保存了四个字段,包括key,value,key对应的hash值以及链表的下一个节点:

static class Entry implements Map.Entry { final K key;//Key-value结构的key V value;//存储值 Entry next;//指向下一个链表节点 final int hash;//哈希值 }

2.Rehash/再散列扩展内部数组长度

推荐阅读