笔记-HashMap底层实现原理
jdk7.0
HashMap map=new HashMap();实例化之后底层会创建一个长度为16的Entry[] table
再往里面加入元素时 map.put(key,value)
首先,调用key所在类的hashCode()计算key的哈希值,然后通过哈希值计算得到在entry[] 中的位置
如果此位置上为空,添加成功。如果位置上有元素(说明有一个或多个元素),于这些元素比较哈希值
哈希值不一样,添加成功;哈希值一样,然后用key所在类的equals()于哈希值相同的元素对比,返回false,添加成功;返回true,把原来的value替换成现在要加的元素的value.
//key所在类的equals()需要重写 默认比的是内存地址
关于扩容得问题 ,当超过临界值(且要存放的位置不为空)扩容 原来的2倍并将原有的数据复制过来
8.0
HashMap map=new HashMap();实例化之后没有创建数组
底层数组时Node[] 不是 entry[]
往里面放入元素 map.put(key,value) 底层初始化长度为16的Node[]
7.0 底层结构为 数组加链表 8.0 底层机构 数组加链表加红黑树
当数组中某一个索引位置上的元素以链表方式存储超过8个以上并且数组长度超过64,此时索引上的所有数据都改成用红黑树存储
7 链表结构中新的元素指向旧元素 8 链表结构中的旧元素指向新元素
DEFAULT_INITIAL_CAPACITY HashMap默认通量 :16
DEFAULT_LOAD_FACTOR HashMap的默认加载因子:0.75
threshold 扩容的临界值 =容量*加载因子 16*0.75=12
慢慢来

浙公网安备 33010602011771号