HashMap 原理解析

HashMap是一种非同步的键值对存储结构,基于哈希表实现。在JDK的不同版本中,HashMap从单纯的数组+链表演变为数组+链表+红黑树。它通过哈希函数将键映射到数组,解决哈希冲突时采用链表或红黑树。HashMap的put和get方法涉及碰撞探测、解决和扩容策略,保证了高效的数据存取。当负载因子达到0.75时,HashMap会自动扩容。
摘要由CSDN通过智能技术生成
HashMap是什么
  1. HashMap是一个链表散列数组和链表),存储是键值对(key-value)映射,HashMap很快(非synchronized)。
  2. HashMap 是基于哈希表的Map接口的非同步实现
  3. 实现提供所有可选的映射操作,并允许使用null值null键(HashTable不能),键位置只能是一个null
  4. 此类不保证映射的顺序,特别是不保证顺序永恒不变。
因JDK版本的变化
  • JDK1.6,JDK1.7中,HashMap采用位桶+链表实现,即使用链表处理哈希冲突 (两个对象调用的hashCode方法计算的哈希码值一致导致计算的数组索引值相同),同一hash值的键值对会被放在同一个位桶里,当桶中元素较多时,通过key值查找的效率较低。
  • JDK1.8中,HashMap采用位桶+链表+红黑树实现,当链表长度超过阈值(或红黑树的边界值,默认为8)并且当前数组的长度大于64时(小于64时对数组进行扩容),此时将链表转换为红黑树,具体查看 treeifBin 方法;这样大大减少了查找时间,提高效率。
链表散列的优势
数组、链表单独使用时的优劣
  • 数组:存储区间连续、占用内存严重,故空间复杂度很大。但数组的二分查找时间复杂度小,为O(1)。特点:寻址容易,插入、删除困难
  • 链表:存储区间离散,占用内存宽松,故空间复杂度很小。但时间复杂度很大,为O(N)。特点:寻址困难,插入、删除容易
  • <
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值