HashMap集合

HashMap集合概述和特点

  • HashMap底层是哈希表结构的
  • 依赖hashCode方法和equals方法保证键的唯一
  • 如果键存储的是自定义对象,需要重写hashCode和equals方法

哈希表结构

  • JDK1.8以前
    哈希表由数组+链表组成
    HashMap集合特点及原理

  • JDK1.8以后

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

  • 节点数多于8个
    数组+红黑树 组成
    HashMap集合特点及原理

数组

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

链表

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

红黑树

  • 红黑树特点
    1、平衡二叉B树
    2、 每一个节点可以是红或者黑
    3、 红黑树不是高度平衡的,它的平衡是通过“自己的红黑规则”实现的
  • 红黑树的红黑规则有哪些
    1、每一个节点或是红色的,或者是黑色的
    2、根节点必须是黑色
    3、如果一个节点或者父节点,则该节点相应的指针属性值为Nil,这些Nil视为叶节点,每个叶节点(Nil)是黑色的
    4、如果一个节点是红色,那么它的子节点必须是黑色(不能出现两个红色节点想练的情况)
    5、对每一个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点
    HashMap集合特点及原理
  • 红黑树节点的默认颜色
    添加节点时,默认为红色,效率高
    HashMap集合特点及原理
  • 红黑树添加节点后如何保持红黑规则
    • 若红黑树添加的节点位置为根节点,则根节点直接变为黑色;
    • 非根节点位置
      1、若父节点为黑色,不需要任何操作,默认红色;
      2、若父节点为红色,并且叔叔节点也为红色,将“父节点”设为黑色,将“叔叔节点”设为黑色,将“祖父节点”设为红色,如果“祖父节点是根节点”,将根节点再次设为黑色;
      3、若父节点为黑色,叔叔节点为黑色, 将“父节点”设为黑色,将“祖父节点”设为红色,以“祖父节点”为支点进行旋转。

哈希值

  • 哈希值简介
    是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值
  • 如何获取哈希值
    Object类中的public int hashCode():返回对象的哈希码值
  • 哈希值的特点
    1、同一个对象多次调用hashCode()方法返回的哈希值是相同的
    2、默认情况下,不同对象的哈希值是不同的。而重写hashCode()方法,可以实现让不同对象的哈希值相同

相关文章:

  • 2022-12-23
  • 2021-05-26
  • 2021-10-25
  • 2021-10-31
  • 2022-01-11
  • 2022-03-06
  • 2021-10-02
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-12-16
  • 2021-12-23
  • 2022-12-23
  • 2022-01-21
  • 2021-04-07
  • 2021-04-21
相关资源
相似解决方案