【发布时间】:2018-06-21 03:58:33
【问题描述】:
对于HashMap<String, String> map,每次将键值对插入映射时都会计算哈希值 -
java.lang.String#hashCode
public int hashCode() {
int h = hash;
if (h == 0 && value.length > 0) {
char val[] = value;
for (int i = 0; i < value.length; i++) {
h = 31 * h + val[i];
}
hash = h;
}
return h;
}
因为不言自明,put操作的复杂度基本上就是hash计算的复杂度。
那么,为 put/get 操作定义 hashmap 最坏情况时间复杂度的适当方法应该是什么?
如果您从哈希冲突的角度有同样的问题,您可以在这里找到答案: Is a Java hashmap really O(1)?
【问题讨论】:
-
该代码无法编译(
hash来自哪里?)。另外,究竟您的编程问题/您遇到的问题是什么? -
@Todd 这不是重复的 - 这个问题指的是不同的东西。
-
@FrankSchmitt 该代码是从字符串源中提取的 -
hash是字符串的缓存哈希值。真正的存储,一些字符串(如“polygenelubricants”,将哈希为 0 导致每次调用hashCode()时都会计算它们!! -
@ravi 这不是同一个问题。请再看一遍
-
但我认为这里其实有这个问题的答案:stackoverflow.com/questions/2771368/…