数据结构之哈希表

这里讲数据结构哈希表,Java集合中的HashTable和HashMap.

1.哈希表

 1.1介绍

哈希表也叫散列表(英文是Hash Table)是一种以 键-值(key-value) 存储数据的结构,我们只要输入待查找的值即key,即可查找到其对应的值。它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快了查找速度。这个映射函数称做散列函数,存放记录的数组称做散列表。

这种方法的好处:哈希表是一个在时间和空间上做出权衡的经典例子。如果没有内存限制,那么可以直接将键作为数组的索引。那么所有的查找时间复杂度为O(1);如果没有时间限制,那么我们可以使用无序数组并进行顺序查找,这样只需要很少的内存。哈希表使用了适度的时间和空间来在这两个极端之间找到了平衡。只需要调整哈希函数算法即可在时间和空间上做出取舍。

 1.2哈希碰撞

不过,哈希表也有它自身的问题:

哈希碰撞(生日碰撞)即如果不同的输入得到了同一个哈希值,就发生了"哈希碰撞"(collision)

 1.3哈希碰撞解决方法

如何解决哈希碰撞?

  ①开放定址法

     如果遇到哈希冲突,找hash表剩下空余的空间,找到空余的空间然后插入。即哈希表中对应哈希值已有元素,就对应下一个元素。

 ②链地址法

如果遇到冲突,他就会在原地址新建一个空间,然后以链表结点的形式插入到该空间。

 

2.HashMap

2.1 Java集合

首先祭上两张图:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值