哈希Hash

文章讨论了哈希算法的特点,如输入与输出的关系,以及在HashMap中的应用,强调了重写equals和hashCode方法的重要性。同时,提到了RedisCluster的数据分片策略。还对比了不同类型的平衡二叉搜索树,如AVL树和红黑树在查询、插入和删除操作中的性能差异。最后,简要提及了MySQL的哈希索引。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概念

  1. 输入为无限的值 输出为有限集合

  2. 特点 : 可重复、不可逆

所以说

3.输入不同 但是得到的哈希值可能相同;(哈希值相同,会被分到同一个数组位置,所以还需要equals相同才能判断是同一个对象;一个链表上的node的key 大部分的hash值都是不同的)

1的平方=1

-1的平方=1

不同的值通过同一重算法可能会获得到相同的结果,所以有结果不一定能推测到原始值。

4.哈希值不同,有可能得到相同的hashmap的数组下标

5.相同的输入会有相同的输出

6.对象头中的hashcode 只有在调用hashcode()方法的时候才会产生

为什么重写equals方法必须重写hashCode方法 重点  (hashmap.put方法的源码)

java HashMap插入重复Key值问题_java map put相同的key-优快云博客


HashMap

jdk1.7中 HashMap 由“数组+链表”组成(也就是老杜讲的)

jdk1.8中 HashMap 由“数组+链表+红黑树”组成

(91条消息) HashMap的put方法_青鸟Will的博客-优快云博客

这个人的78有点小问题


Redis Cluster数据分片

Redis Cluster数据分片实现原理、及请求路由实现-优快云博客

Redis Cluster采用虚拟哈希槽分区而非一致性hash算法,预先分配16384(2^14)个卡槽,所有的键根据哈希函数映射到 0 ~ 16383整数槽内,每一个分区内的master节点负责维护一部分槽以及槽所映射的键值数据。


二叉(搜索/查找)树、 AVL(平衡二叉树)、红黑树、B-Tree、B+Tree

  1. 二叉(搜索/查找)树

下图老杜讲的 老杜说TreeSet/Map是平衡二叉树 但是他画的图是不平衡的二叉树,就是普通的二叉树

下图是宋老师的课件

  1. AVL(平衡二叉搜索树)

在上面的基础上 规定了左子树和右子树的高度差不得超过1

3、 B-Tree

4、 B+

5、 红黑树 (是非严格的2) 暂时没看懂

红黑树(RBTree):是一种非严格平衡的二叉查找树,即不完全符合左右子树的高度差最大为1这个条件,通过引入节点颜色来降低旋转次数

AVL树:是一种严格平衡的二叉查找树,即严格遵循左右子树的高度差最大为1这个条件

5.1红黑树规定了:

1.节点是红色或黑色。

2.根节点是黑色。

3.每个叶子节点都是黑色的空节点(NIL节点)。

4 每个红色节点的两个子节点都是黑色。也就是说从每个叶子到根的所有路径上不能有两个连续的红色节点)。

5.从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。

5.2旋转

AVL树和红黑树的插入和删除操作都需要通过树的旋转来维持平衡。

5.3性能
(1)查询性能 红黑树(RBTree)和AVL树对比_grey红树vw vlw vllw-优快云博客

红黑树的查询性能略逊于AVL树,因为RBTree比AVL树不平衡最多多出一层,即拥有相同内容的二叉树,RBTree查询比AVL树查询最多多一次比较而已,因此查询性能上略逊于AVL树

(2)插入和删除节点

插入:一个节点的插入RBTree和AVL树都需要最多两次旋转操作保持平衡,即复杂度都是O(1)

删除:一个节点的删除,RBTree最多三次旋转操作保持平衡,复杂度是O(1),而AVL树需要维护被删节点到根节点路径上的所有节点的平衡性,需要做大量的旋转操作来达到平衡性,复杂度是O(logN)

综上所述:RBTree比AVL树的插入和删除效率要高很多


ConcurrentHashMap


syn的偏向锁 

当一个对象已经计算过 hashCode,就再也无法进入偏向状态了

有点诡异 可以理解为 没有地方放 threadid、epoch


hash索引

MySQL哈希索引以及InnoDB自适应哈希索引_innodb索引中的哈希索引-优快云博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值