作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
hastable
在对象上使用一些哈希函数来存储。
这个哈希函数本质上是计算对象在表中的位置。
如果我们使用 HashTable
或 HashMap
并且大小不能容纳更多元素,那么这些集合将调整大小以容纳更多元素。
这意味着必须重新散列每个存储的元素以计算新的更大表中的新位置。
我的问题如下(以上是正确的):
我读到 String
通过使用它存储的字符计算其 hashcode
并且 hashvalue
存储在内部(缓存)以获得最佳性能,因为它不必重新计算。
这是我没有得到的部分。如果 hashcode
是基于 String
存储的字符,那么 hashtable< 中的位置如何
计算?
String
的hashcode
是否有一些额外的逻辑?所以 String
的 hashcode
实际上不是 hashvalue
?
最佳答案
哈希码没有改变。只有内表中的位置是。打开 HashMap
并查看:
static int indexFor(int h, int length) {
return h & (length-1);
}
表(实际上是数组)中的索引是根据散列和数组的大小确定的。
因此,当“重新散列”发生时,它使用相同的散列码,但长度不同,这意味着该元素被放入不同的桶中。
关于Java 字符串 : Is hashcode actually the hashvalue?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9025681/
我是一名优秀的程序员,十分优秀!