HashMap集合特点及原理

HashMap集合

HashMap集合概述和特点
  • HashMap底层是哈希表结构的
  • 依赖hashCode方法和equals方法保证键的唯一
  • 如果键存储的是自定义对象,需要重写hashCode和equals方法
哈希表结构
  • JDK1.8以前
    哈希表由数组+链表组成
    在这里插入图片描述

  • JDK1.8以后

  • 节点个数少于等于8个
    数组+链表 组成

  • 节点数多于8个
    数组+红黑树 组成
    在这里插入图片描述

数组

数组的存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间复杂度小,为O(1);数组的特点是:寻址容易,插入和删除困难

链表

链表存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度很大,达O(N)。链表的特点是:寻址困难,插入删除容易

红黑树
  • 红黑树特点
    1、平衡二叉B树
    2、 每一个节点可以是红或者黑
    3、 红黑树不是高度平衡的,它的平衡是通过“自己的红黑规则”实现的
  • 红黑树的红黑规则有哪些
    1、每一个节点或是红色的,或者是黑色的
    2、根节点必须是黑色
    3、如果一个节点或者父节点,则该节点相应的指针属性值为Nil,这些Nil视为叶节点,每个叶节点(Nil)是黑色的
    4、如果一个节点是红色,那么它的子节点必须是黑色(不能出现两个红色节点想练的情况)
    5、对每一个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点
    在这里插入图片描述
  • 红黑树节点的默认颜色
    添加节点时,默认为红色,效率高
    在这里插入图片描述
  • 红黑树添加节点后如何保持红黑规则
    • 若红黑树添加的节点位置为根节点,则根节点直接变为黑色;
    • 非根节点位置
      1、若父节点为黑色,不需要任何操作,默认红色;
      2、若父节点为红色,并且叔叔节点也为红色,将“父节点”设为黑色,将“叔叔节点”设为黑色,将“祖父节点”设为红色,如果“祖父节点是根节点”,将根节点再次设为黑色;
      3、若父节点为黑色,叔叔节点为黑色, 将“父节点”设为黑色,将“祖父节点”设为红色,以“祖父节点”为支点进行旋转。
哈希值
  • 哈希值简介
    是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值
  • 如何获取哈希值
    Object类中的public int hashCode():返回对象的哈希码值
  • 哈希值的特点
    1、同一个对象多次调用hashCode()方法返回的哈希值是相同的
    2、默认情况下,不同对象的哈希值是不同的。而重写hashCode()方法,可以实现让不同对象的哈希值相同
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值