HashMap的底层数据结构和原理

map底层数据架构
HashMap的底层数据结构和原理
Map底层的数据结构是链表数组Node[],实现Map.Entry接口类
Node类中的属性有:K key,V value,int hash,Node next
我们从属性就可以看出来Node类是一个链表,因为可以指向下一个Node
Map就一个Node数组,所以map的底层数据结构是一个链表数组(散列)

扩容因子越大,链表上存在的数据越多(同一链表上的hashcode是一样的)。反之越少。

map的初始化长度的16,当使用超过四分之三的时候就会扩容。

谈谈Put和get方法:
Map的put方法:
1. 首先判断node数组,也就是数组是否为空,为空的话就初始化hashmap
2. 如果node数组不为空的话,就判断key是否为空,为空的话就将放到数组的第一个位置
3. 就通过key获取hash值,通过hash值做比较,如果key的hash值相等 并且key.equals(e.key)也相等的话,就将新的value替换掉旧的。如果条件不满足就创建一个node,且用上一个node的next指向新创建的node
Map的get方法:
1. Key==null的时候,判断map也为空,就返回null
2. 根据node数组下标找到node数组下标
3. 如果当前node链表只存在一个数据就直接取value值
如果当前node链表存在多个node元素,则循环遍历node链表,分别对他们的hash值和key值,value值进行判断,知道找到node以后返回Value值,如果没有找到返回null