HashMap原理

HashMap:

1.存储结构:

JDK1.7

HashMap底层存储结构是散列表,即数组(散列桶Map.Entry[]) + 单向链表.

JDK8

HashMap底层存储结构是散列表,即数组(散列桶Node[]) + 单向链表 + 红黑树(TreeNode)

加入红黑树的原因:

HashMap存储元素时,如果元素Hash值发生碰撞的次数很多的时候,链表节点增多,查询效率越来越低

所以JDK8中,当链表中节点数量达到8个,即使用红黑树结构替换链表,当红黑树节点数量少于6个时,则更换为链表,加个中间值7是为了防止频繁切换数据结构

2.存取原理(1.7)

key==null

存取都是在数组的第一个元素

key!=null
存:根据key的hashCode计算出在位桶中的位置,然后遍历链表中的节点,有相同的则替换value,没有则新增到链表头部(JDK1.7是头部,1.8是尾部)

取:根据key的hashCode计算出在位桶中的位置,然后遍历链表中的节点,当hashCode相同且key相同则返回

3.扩容机制

当添加元素时,元素数量>=加载因子*容量 且 元素数量不超过Integer.Max_value时 ,即扩容为原size*2

新建数组并将原数组中的数据复制到新数组.

 

转载于:https://www.cnblogs.com/jia-bei/p/8472994.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值