HashMap中的add方法如何确定密钥在HashMap中的位置?就像,如果我试图将“S”,“T”,“A”,“C”,“K”放入大小为10的HashMap中,它如何确定每个字母的位置?
答案 0 :(得分:4)
对象哈希码的最低有效位用于选择存储桶。请注意,没有大小为10的java.util.HashMap,大小必须是2的幂,以便可以屏蔽这些位以选择存储桶。如果将10传递给构造函数,则会得到一个包含16个桶的HashMap。
因此,为了清晰起见,减少到8位,如果“S”返回哈希码123,则java将执行
01111011 & 00001111 -> 00001011
并将S放入桶11中。
真正的哈希映射还应用了一个二级哈希函数,该函数向右移位位以确保在最低有效位中存在具有一些熵的数据,这样即使它们的hashCode函数不是均匀分布的事物也很有可能太棒了。