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

String类的Java hashCode方法的时间复杂度是多少?,java,Java,Java的字符串类hashCode方法是在常数时间还是线性时间内计算的?使用的算法是什么 文档告诉您该函数: s[0]*31^(n-1)+s[1]*31^(n-2)+…+s[n-1] 它使用一个线性时间过程计算一次,然后缓存,因此将来只需要O(1)来检索它。根据 公共int hashCode() 返回此字符串的哈希代码。字符串对象的哈希代码计算为 s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1] 如您所见,时间复杂度是O(n),其中n是字符串中的

Java的字符串类hashCode方法是在常数时间还是线性时间内计算的?使用的算法是什么

文档告诉您该函数:

s[0]*31^(n-1)+s[1]*31^(n-2)+…+s[n-1]

它使用一个线性时间过程计算一次,然后缓存,因此将来只需要O(1)来检索它。

根据

公共int hashCode()

返回此字符串的哈希代码。字符串对象的哈希代码计算为

    s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]

如您所见,时间复杂度是O(n),其中n是字符串中的字符数。在一次传递之后,它被缓存,因此时间复杂度实际上是O(1)。

对象::hashCode方法的时间复杂度是O(1),因为它与对象的数据没有任何交互。这是一种本地方法,用C语言编写。返回的整数值可能是经过一些修改的堆内存地址(按位操作),因为内存中的每个地址都表示唯一的值


例如,4GB内存地址将以十六进制格式表示,从
0x00000000
0xffffff
范围,并且每个值都是唯一的。因此,Java不需要额外的计算来确保这些值的唯一性。因此,
hashCode
提供恒定的时间复杂度。

如何读取?除非;-)这个答案不完整/有误导性,因为它没有考虑缓存。缓存使复杂性有效地分摊到O(1)。