关于哈希表知识点总结

目录

哈希表

哈希函数

*底层结构

*如何判断新增的两个元素是否重复(比较规则):

*哈希表新增过程:

*什么情况下链表会转红黑树:

*什么情况下会扩容:


哈希表

哈希表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。

给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash) 函数。

哈希表的关键思想就是使用哈希函数,将键 key 和值 value 映射到对应表的某个区块中。可以将算法思想分为两个部分:

  • 向哈希表中插入一个关键字:哈希函数决定该关键字的对应值应该存放到表中的哪个区块,并将对应值存放到该区块中
  • 在哈希表中搜索一个关键字:使用相同的哈希函数从哈希表中查找对应的区块,并在特定的区块搜索该关键字对应的值

哈希函数

哈希函数指将哈希表中元素的关键键值映射为元素存储位置的函数。

*底层结构

底层数据结构:哈希表(数组+链表/红黑树)
什么类型的数组:java.util.HashMap$Node(表示一个单项链表)
数组长度是多少:16

*如何判断新增的两个元素是否重复(比较规则):

比较两个对象的哈希值  &&   (地址值相同 || equals相同)

*哈希表新增过程:

a.计算新增元素的哈希值
b.(假设数组已经创建出来),通过  hash%数组长度
c.如果该位置为null:则直接新增
   如果该位置不为null:
        c1.判断该元素是否重复:
                c11.如果不重复,则新增到该索引值位置链表的最后面
                c12.如果重复:则不新增

*什么情况下链表会转红黑树:

当同一索引值下元素个数>8,并且数组长度>=64

*什么情况下会扩容:

a.当同一索引值下元素个数>8,并且数组长度<64

b.数组的索引值,占有>到0.75,会扩容

        注意:同一索引值下元素不能超过8个,如果超过
                1.扩容,把元素分开,让其小于8个
                2.把链表结构转换成红黑树
                   新容量 = 旧容量<<1;

可以通过构造方法指定加载因子。
可以通过构造方法指定哈希表数组的长度:
实际的长度>=传入容量,则最近2的次方的值。 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值