基本哈希概念

时间:2012-01-26 17:51:45

标签: data-structures hashmap hashtable

我有一个非常基本的问题。相信我,我读过很多书,看过视频,却无法得到答案。 假设我们有HashMap。 我有3(a,b,c)值映射到相同的散列,a和b相同,但c是不同的。 如果我只将ha和b添加到hastable,hashMap如何知道它不是碰撞。

假设我们有Hashmap ....现在我调用put(obj1,“Test”)然后把(obj2,“Test”)obj1和obj2映射到同一个键....你能告诉我什么是哈希映射将要存储这两个电话

它会存储实际物体吗? 如果obj1和obj2相同,如果没有如何决定第二次调用它是不是冲突。

谢谢

2 个答案:

答案 0 :(得分:0)

大多数哈希表需要来自存储对象的两位支持 - GetHashCode()和Equals()。

如果两个对象返回相同的GetHashCode(),但它们与Equals()的比较返回true,则它们表示相同的数据,因此不是冲突,只是重复的条目。

如果两个对象返回相同的GetHashCode(),并且它们的比较返回false,则Hashtable知道对象表示不同的东西,因此将其视为冲突。

这就是为什么在许多oop语言中,比如C#,你必须在存储对象中覆盖/实现GetHashCode()和Equals()。如果您实现了这些方法,那么当与Equals()比较时,两个对象返回true,但从GetHashCode()返回不同的值,那么您就有了错误。

答案 1 :(得分:0)

根据维基百科:

  

在计算机科学中,哈希表或哈希图是一种数据结构   使用散列函数来映射识别值,称为密钥(例如,a   他们的相关价值(例如他们的电话)   数)。因此,哈希表实现了一个关联数组。

Wiki还将关联数组称为“由(键,值)对集合组成的抽象数据类型”。

所以是的,哈希表确实知道他们的“租户”。