Java字符串:hashcode实际上就是hashvalue



hastable在要存储的对象上使用一些哈希函数。

这个散列函数本质上计算对象在表中的位置。

如果我们使用HashTableHashMap,并且大小无法容纳更多元素,则会调整这些集合的大小以容纳更多元素
这意味着必须对每个存储的元素进行重新散列,以计算新的更大表中的新位置。

我的问题如下(以上都是正确的):
我读到String通过使用其存储的字符来计算其hashcode,此外,hashvalue被内部存储(缓存)以获得最佳性能,因为它不必重新计算。

这是我不明白的部分。如果hashcode基于String存储的字符,那么如何计算hashtable中的位置?

是否有一些额外的逻辑使用Stringhashcode?所以Stringhashcode实际上不是hashvalue

哈希代码没有更改。只有内部表格中的位置是。打开HashMap,查看:

static int indexFor(int h, int length) {
    return h & (length-1);
}

表(实际上是数组)中的索引是根据哈希和数组的大小确定的。

因此,当"rehashing"发生时,它使用相同的哈希代码,但长度不同,这意味着元素被放在不同的桶中。

最新更新