Hash 哈希表的键、值、哈希和哈希函数

Hash 哈希表的键、值、哈希和哈希函数,hash,hashset,Hash,Hashset,我很难理解散列函数做什么和不做什么,以及Bucket到底是什么 据我了解: 哈希表是使用哈希函数将键映射到值的数据结构 HashFunction用于将数据从任意/未知大小的数组映射到固定大小的数据数组 原始数据数组中可能存在重复值,但这与此无关 每个值都有一个唯一的键。因此,每个键正好有一个值 HashFunction将为每个(值、键)对生成一个HashCode。但是,当多个(值、键)对映射到同一哈希代码时,可能会发生冲突 这可以通过使用链接/开放寻址方法来解决 HashCode是一个索引值,指

我很难理解散列函数做什么和不做什么,以及Bucket到底是什么

据我了解:

哈希表是使用哈希函数将键映射到值的数据结构

HashFunction用于将数据从任意/未知大小的数组映射到固定大小的数据数组

原始数据数组中可能存在重复值,但这与此无关

每个值都有一个唯一的键。因此,每个键正好有一个值

HashFunction将为每个(值、键)对生成一个HashCode。但是,当多个(值、键)对映射到同一哈希代码时,可能会发生冲突

这可以通过使用链接/开放寻址方法来解决

HashCode是一个索引值,指示Bucket数组中原始数据数组中特定条目的位置

Bucket数组是构建的固定数据数组,它将包含来自原始数组的条目

我的问题是:

如何为每个值生成键?HashFunction是否要为每个条目生成Key和HashCode值?每个Bucket是否因此只包含一个条目(假设使用链接实现来补救冲突)

如何为每个值生成键

键不是生成的,它是由您提供的,并作为哈希函数的输入,哈希函数反过来将该键转换为哈希表的索引。简单地说:

H(key)=index
因此,您要寻找的价值是:

hash_table[index] = value
HashFunction是为每个条目生成HashCode值吗

这完全取决于哈希函数和哈希表的实现。一些散列函数可能会从提供的键生成一个散列码,然后以其
模(大小)
为例,其中
size
是散列表的大小,以便获取索引。其他人可能会将键直接转换为索引。无论哪种情况,哈希函数的最终目标都是在固定时间内找到哈希表中搜索数据的位置

每个Bucket是否因此只包含一个条目(假设使用链接实现来补救冲突)


理想情况下,每个关键点都应该映射到一个唯一的索引,但大多数情况下并非如此,因为存储桶的数量(即索引)远小于关键点的数量,因此每个存储桶的链平均长度(即每个存储桶的碰撞数)是
键数/索引数

,那么更合适的说法是:HashCode应该是一种为特定(值、键)对生成整数值(HashCode)的方法,理想情况下,它是唯一的;HashFunction应该是一种方法,它根据特定“键”的hashcode?@K.Doe将每个(值、键)对映射到Bucket数组中的一个位置。not(value,key)@K.Doe忘记值。价值只是你想要储存的东西。哈希不能处理它,明白了吗。非常感谢!