【问题标题】:How does HashMap determine where to put things? [duplicate]HashMap 是如何决定把东西放在哪里的? [复制]
【发布时间】:2013-04-03 18:08:06
【问题描述】:

HashMap 中的 add 方法如何确定键在 HashMap 中的位置?比如,如果我试图将 "S","T","A","C","K" 放入大小为 10 的 HashMap 中,它如何确定每个字母的去向?

【问题讨论】:

  • 对象的hashCode()方法
  • 它散列它。我很确定,如果你用谷歌搜索它,你会发现一篇或三篇关于哈希表的好 Wikipedia 文章,等等。
  • 不同意上一题的内容是本题的满意答案。

标签: java hashmap


【解决方案1】:

对象哈希码的最低有效位用于选择存储桶。请注意,没有大小为 10 的 java.util.HashMap 之类的东西,大小必须是 2 的幂,以便可以屏蔽这些位以选择存储桶。如果你将 10 传递给构造函数,你将得到一个带有 16 个桶的 HashMap。

所以,为了清楚起见,减少到 8 位,如果“S”返回哈希码 123,java 就可以了

01111011 & 00001111 -> 00001011

并将 S 放入桶 11。

真正的 Hash Map 还应用了一个二级哈希函数,该函数将位向右移动,以确保数据在最低有效位中有一些熵,这样即使它们的 hashCode 函数不是,也很有可能均匀分布太好了。

【讨论】:

    猜你喜欢
    • 2017-07-09
    • 2012-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    • 2015-08-18
    相关资源
    最近更新 更多