【什么是哈希, 什么是哈希冲突,怎么解决哈希冲突? 】

Hash, 一般翻译为“散列” , 散列值有直接音译为“哈希”的, 这就是把任意长度的输入通过散列 算法, 变换成固定长度的输出, 该输出就是散列值(哈希值) ;
这种转换是一种压缩映射, 也就是, 散列值的空间通常远小于输入的空间, 不同的输入可能会散列成相同的输出, 所 以不可能从散列值来唯一的确定输入值。 概括的说就是一种将任意长度的消息压缩到某一 固定长度的消息摘要的函数。
哈希冲突: 所有散列函数都有如下一个基本特性: 根据同一散列函数计算出的散列值如果不同,那么 输入值肯定也不同。但是,根据同一散列函数计算出的散列值如果相同 (哈希冲突情况) , 输入值不一定相同,这样就形成哈希冲突了。
怎么解决哈西冲突呢?
a.再散列法 再散列法其实很简单, 就是再使用哈希函数去散列一个输入的时候, 输出是同一个位置就 再次散列, 直至不发生冲突位置 缺点: 每次冲突都要重新散列, 计算时间增加。
读过hashmap的同学都知道,在hashmap的key出现哈希冲突时,就会进行链化,那么我们可以有那些解决哈希冲突的方法呢
b链地址法 (拉链法) HashMap, HashSet其实都是采用的拉链法来解决哈希冲突的, 就是在每个位桶 实现的时候, 我们采用链表 (jdk1.8之后采用链表+红黑树) 的数据结构来去存取发生哈希冲突的输 入域的关键字;
c开放定址法是解决hash冲突的一种方式。 它是使用一种 探测方式在整个数组中找到另一个可以存 储值的地方。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值