繁体   English   中英

String 类的 Java hashCode 方法的时间复杂度是多少?

[英]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 内存地址将以十六进制格式表示,从0x000000000xffffffff范围,并且每个值都是唯一的。 因此,Java 不需要额外的计算来确保这些值的唯一性。 因此hashCode给出了恒定的时间复杂度。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM