[英]What is the time complexity of java.util.HashMap class' keySet() method?
[英]What is the time complexity of Java hashCode method for the String class?
Java 的 String 类的 hashCode 方法是以常数时间还是线性时间计算的? 使用的算法是什么?
文档告诉你这个功能:
s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
它使用线性时间传递计算一次,然后缓存,以便将来检索它只需 O(1)。
根据文档
公共 int hashCode()
返回此字符串的哈希码。 String 对象的哈希码计算如下
s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
如您所见,时间复杂度为 O(n),其中 n 是字符串中的字符数。 经过一次后,它被缓存,因此时间复杂度实际上是 O(1)。
Object::hashCode
方法的时间复杂度为 O(1),因为它与对象的数据没有任何交互。 它是一种本地方法,用 C 语言编写。 返回的整数值可能是经过一些修改(按位运算)的堆内存地址,因为内存中的每个地址都代表唯一值。
例如,4GB 内存地址将以十六进制格式表示,从0x00000000
到0xffffffff
范围,并且每个值都是唯一的。 因此,Java 不需要额外的计算来确保这些值的唯一性。 因此hashCode
给出了恒定的时间复杂度。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.