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

时间:2016-01-21 05:42:07

标签: java

Java的String类的hashCode方法是在恒定时间还是线性时间内计算的?使用的算法是什么?

3 个答案:

答案 0 :(得分:9)

文档告诉你函数:

  

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

使用线性时间传递计算一次,然后缓存,以便将来只检索O(1)。

答案 1 :(得分:1)

根据docs

  

public int hashCode()

     

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

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

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

答案 2 :(得分:0)

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

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