美文网首页
哈希表—链地址法

哈希表—链地址法

作者: 尤奇勤_三月 | 来源:发表于2019-07-15 19:47 被阅读0次
冰冻非一日之寒

哈希冲突是不可避免的,所以我们在设计哈希函数的同时,也要设计解决哈希冲突的办法。

哈希表本质就是一个数组。

通过上一篇知识求出关键字所对应的索引,存储到数组中即可。素数M也是数组的长度

哈希表&数组

通过哈希函数求得的哈希值可能会是一个负数,对哈希值求绝对值即可。有时我们也会见到以下表达式

关键字&索引

哈希值按位与上一个16进制数。

原理:这个16进制数转化为2进制就是一个0,三十一个1。计算机中对整型的表示,第一个数字表示符号位(0代表整数,1代表负数)

将一个整数与之按位与后,第一位肯定是0(代表整数),后面是整数原来的数字。即最后只是改变了整数的符号位,并将这个整数变成正整数

求绝对值

这样,就得到了一个正整数。

当两个不同的关键字求得的索引相同时,该如何存储呢?

哈希表—链地址法

开辟一个数组,有M个空间,在每一个空间中存储一个链表,这个链表实际上就是一个查找表,可以存储多个数据

哈希表—链地址法

查找表可以使用一个平衡树(红黑树)结构。

TM的底层实现是红黑树

这样,数组中的每一个空间就有一个TreeMap数组(红黑树)了。

在Java8之前,数组中每一个空间对应的就是一个链表

Java8,当哈希冲突达到一定程度后,每一个空间从链表转成红黑树

JAVA

在Java8中,为什么要有这一步的转化操作呢?

因为,当我们的数据规模比较小的时候,也就是哈希冲突比较小,使用链表可以更快的进行增删改查等操作。而使用红黑树的话,还要进行旋转操作,这反而让操作更复杂。

以上就是解决哈希冲突最常用的链地址法

相关文章

  • HashMap 1.7 死循环分析

    数据结构 HashMap 使用哈希表也叫散列表来存储数据的,哈希表为解决冲突,可以采用开放地址法、链地址法等来解决...

  • 哈希表—链地址法

    冰冻非一日之寒 哈希冲突是不可避免的,所以我们在设计哈希函数的同时,也要设计解决哈希冲突的办法。 哈希表本质就是一...

  • 哈希法-哈希表介绍、构造方法、解决冲突办法

    哈希法-哈希表介绍   哈希法又称散列法、杂凑法以及关键字地址计算法等,相应的表称为哈希表。这种方法的基本思想是:...

  • (1) 面试

    哈希算法处理冲突的机制: 1.开放寻址法2. 再散列法3. 链地址法(拉链法)4. 建立一个公共溢出区参考:哈希表...

  • Redis:rehash

    Redis解决键冲突:使用的是链地址法 随着操作的不断执行, 哈希表保存的键值对会逐渐地增多或者减少, 为了让哈希...

  • HashMap源码分析(基于jdk1.8)

    一.简介 hashmap本身是一个使用链地址法(拉链法)的哈希表,主干为一个node数组,每个node包含一对ke...

  • HashMap面试基础

    HashMap 必备知识——哈希表 哈希表 哈希函数 哈希碰撞 解决办法 1. 拉链法 2. 线性探测法 Hash...

  • hash table

    哈希冲突 1.开放定址法 2.再哈希法 3.链地址法(JAVA官方,默认使用单向链表将元素串起来,在添加元素时,可...

  • java基础面试题总结——集合框架

    1. 在Java中,HashMap中是用哪些方法来解决哈希冲突的? A. 开放地址法 B. 二次哈希法 C. 链地...

  • 哈希公共服务

    哈希链地址法 哈希的引入是数组和链表的结合体,有效解决了查询/插入/删除的性能问题。但不可避免的引入了哈希冲突问题...

网友评论

      本文标题:哈希表—链地址法

      本文链接:https://www.haomeiwen.com/subject/aehpbqtx.html