Java Map接口

什么是Map

Map是一种键对象和值对象具有映射关系的集合,它的每一个元素包含一对键对象和值对象,向Map集合加入元素时,必须提供一对键对象和值对象。

注意:

  • 在 Map 接口中,每个键都必须是唯一的,即不允许重复的键存在。 (当Key的值重复的时候,后面插入的对象会将之前插入的具有相同的Key值的对象覆盖掉)
  • Value的值可重复
  • 每个键只能对应一个值。

Map有多个子类,但是只介绍在这里hashMap。

HashMap介绍

1.HashMap 底层数据结构:
hashMap是由数组和链表这两个结构来存储数据。

  • 数组:数组通过索引直接访问元素,它的查询容易便捷,但是对于一般的插入、删除操作,涉及到数组元素的移动就会很麻烦
  • 链表:链表的插入、删除操作相对容易,只需要处理节点的引用,但是链表的查询操作需要遍历整个链表

哈希表综合两者的特性,使得数据的查询、插入、删除容易。

在hashmap中存入一个key+value,我们称为node一个节点,我们对这个节点的key进行哈希算法运算(算出key的hashcode值在对10取模),这样算出的数字即为该node在数组中的位置下标,可是很多key的hashcode值如果相同,下标相同怎么办,这时会形成链表
在这里插入图片描述
内容补充(了解就行):
1.当链表节点小于等于6,自动退化成链表
2.当链表节点大于等于8,长度大于64时进行变化成红黑树
3.数组默认初始容量为16

2.扩容机制:
hashMap能够自动扩容。
默认情况下,数组大小为16,那么当hashmap中元素个数超过16*0.75=12的时候,则会进行数组扩容,将数组长度扩容为原来的2倍。

3.为什么一定要重写hashCode()方法和equals()方法?
首先我们要明白hashCode()方法和equals()方法这两个方法是干什么的:

  • hashCode()方法的作用,是用来定义,通过当前这个类创建类对象时,这个类对象的hash值到底是应该怎样计算的
  • equals()方法的作用,是用来规定,通过当前这个类创建类对象时,这个类对象在什么情况下可以认为是同一个对象(比如,我们认为当前类中某些字段的内容完全相同时,我们就认为它们是同一个对象,而不再是之前的,通过==号类判断当前类对象的地址引用。)

由于所有的类都会默认继承父类Object类,所以我们可以重写Object类中的hashCode()和equals()方法。通过继承规则我们也知道,如果我们自定义的子类中重写了hashCode()和equals()方法,那么在调用这两个方法时,会调用我们子类重写的逻辑。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值