Java的String类中length()函数的复杂性是什么?

时间:2013-11-28 10:57:34

标签: java time-complexity

是O(n)还是O(1)(通过在对象的字符串分配期间保存私有变量的长度)。

如果是O(n),是否意味着下面代码的复杂性是O(n ^ 2)?

for(int i=0; i<s.length()-1;i++){
    //some code here!
}

4 个答案:

答案 0 :(得分:14)

O(1)String实例已知长度。{/ p>

从JDK 1.6可见。

public int length() {
    return count;
}

更新

了解为什么他们可以缓存count的值并继续使用count的相同值非常重要。原因在于他们在设计String时所做的一个很好的决定,即它的不变性。

答案 1 :(得分:1)

在Java中,任何String都由final数组备份。因此返回数组长度很简单。所以它是O(1)复杂性。如果你在代码中思考

for(int i=0; i<s.length()-1;i++){
    //some code here!
}
每次迭代都会调用

s.length(),然后你就不对了。现代编译器优化了这种类型的调用,并将s.length()更改为常数(即String实例的长度)。

答案 2 :(得分:0)

复杂性为O(1),因为String类的长度为field。这不是O(n ^ 2)。

答案 3 :(得分:0)

String内部维护一个数组字符,数组的长度是数组对象的属性,因此O(1)是其简单的属性读取。