HashMap解读

HashMap允许null键和值,基于数组+链表或红黑树实现。JDK7中,当元素超过容量的0.75倍时进行扩容,数组扩大一倍。JDK8引入了树化机制,当链表长度达到8且数组容量大于64时,链表转为红黑树。面试常问HashMap原理、特点及其与equals()和hashCode()的关系。
摘要由CSDN通过智能技术生成

在这里插入图片描述

HashMap的特点:

  • 允许使用null键和null值,与 HashSet一样,不保证映射的顺序。
  • 所有的key构成的集合是set:无序的、不可重复的。所以,key所在的类要重写equals()和 hashCode()
  • 所有的value构成的集合是Collection:无序的、可以重复的。所以,value所在的类要重写:equals()
  • 一个key-value构成一个entry,所有的entry构成的集合是Set:无序的、不可重复的
  • HashMap判断两个key相等的标准是:两个key通过equals()方法返回true,hashCode值也相等。
  • HashMap判断两个value相等的标准是:两个value通过equals()方法返回true。
  • HashMap的底层: 数组+链表 (JDK 7.0及之前)
    数组+链表+红黑树 (JDK 8.0以后)

HashMap实现原理:jdk7.0

在这里插入图片描述
HashMap中主要存储着一个Entry的数组table,Entry就是数组中的元素,Entry实现了Map.Entry所以其实Entry就是一个key-value对,并且它持有一个指向下一个元素的引用,这样构成了链表

HashMap的put方法

在这里插入图片描述

HashMap的扩容

当HashMap中的元素越来越多的时候,hash冲突的几率也就越来越高,因为数组的长度是固定的。
所以为了提高查询的效率,就要对 HashMap的数组进行扩容,而在HashMap数组扩容之后,原数组中的数据必须重新计算其在新数组中的位置,并放进去,这就是 resize。

默认情况下,数组大小为16,那么当HashMap中元素个数超过16

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值