我有一个非常基本的问题。相信我,我读过很多书,看过视频,却无法得到答案。 假设我们有HashMap。 我有3(a,b,c)值映射到相同的散列,a和b相同,但c是不同的。 如果我只将ha和b添加到hastable,hashMap如何知道它不是碰撞。
假设我们有Hashmap ....现在我调用put(obj1,“Test”)然后把(obj2,“Test”)obj1和obj2映射到同一个键....你能告诉我什么是哈希映射将要存储这两个电话
它会存储实际物体吗? 如果obj1和obj2相同,如果没有如何决定第二次调用它是不是冲突。
谢谢
答案 0 :(得分:0)
大多数哈希表需要来自存储对象的两位支持 - GetHashCode()和Equals()。
如果两个对象返回相同的GetHashCode(),但它们与Equals()的比较返回true,则它们表示相同的数据,因此不是冲突,只是重复的条目。
如果两个对象返回相同的GetHashCode(),并且它们的比较返回false,则Hashtable知道对象表示不同的东西,因此将其视为冲突。
这就是为什么在许多oop语言中,比如C#,你必须在存储对象中覆盖/实现GetHashCode()和Equals()。如果您实现了这些方法,那么当与Equals()比较时,两个对象返回true,但从GetHashCode()返回不同的值,那么您就有了错误。
答案 1 :(得分:0)
根据维基百科:
在计算机科学中,哈希表或哈希图是一种数据结构 使用散列函数来映射识别值,称为密钥(例如,a 他们的相关价值(例如他们的电话) 数)。因此,哈希表实现了一个关联数组。
Wiki还将关联数组称为“由(键,值)对集合组成的抽象数据类型”。
所以是的,哈希表确实知道他们的“租户”。