哈希映射中最有效的密钥对象类型?

Dil*_*ton 6 java key object hashmap data-structures

使用a HashMap时,对于速度,对象类型对于元素检索有多大影响?假设我使用循环来迭代大型哈希映射的可能键.什么是我可以使用的最有效的密钥类型?

截至目前,由于简单起见,我使用String作为关键对象类型.在编码时,这个问题突然出现在我的脑海中并激起了我的好奇心.我试图在网上搜索这个问题,但找不到我想要的答案.谢谢!

Evg*_*eev 5

  1. 关键hashCode()equals()应该很快

  2. hashCode() 应该很好地分布以尽量减少哈希冲突


Dee*_*ala 3

哈希映射会向您询问密钥hashCode()。如果生成哈希码所花费的时间不合理,那么此类对象的插入和检索时间将会很长。举java.net.URL个例子。它的 hashcode 方法执行 DNS 查找。此类对象不会成为哈希映射的良好键。

对于哪个是最好的密钥,没有通用的答案,因为不存在最好的密钥。在哈希映射中使用的最佳密钥是您检索所需的密钥。只要确保钥匙hashCode()快速并int适当地使用空间即可。

  • 正如所有答案所暗示的那样,密钥本身并不存储。调用键的 hashCode() 方法来检索 int 值。然后这个 int 值在内部用作键。如果两个键对象具有相同的 hashCode() 结果,则会在内部采取进一步的步骤来消除冲突并消除键/值对的歧义。当然,整数的 hashCode() 方法没有太多的计算开销。因此,可以说,整数最适合用作键。但是,您的程序的需要可能会优先使用整数作为键。这就是 hashCode 方法的用途! (2认同)