Java 中 String.length() 的时间复杂度是多少?
2022-09-04 05:48:11
是 O(n) 还是 O(1)(通过在字符串分配给对象期间将长度保存在私有变量中)?
如果是O(n),是否意味着以下代码的复杂度是O(n^2)?
for(int i=0; i<s.length()-1;i++){
//some code here!
}
是 O(n) 还是 O(1)(通过在字符串分配给对象期间将长度保存在私有变量中)?
如果是O(n),是否意味着以下代码的复杂度是O(n^2)?
for(int i=0; i<s.length()-1;i++){
//some code here!
}
这是因为长度已经知道实例。O(1)
String
从JDK 1.6中可以看到它。
public int length() {
return count;
}
更新
了解为什么它们可以缓存 的值并继续使用相同的值非常重要。原因在于他们在设计时做出的一个伟大的决定,它的不变性。count
count
String
在Java中,任何字符串都由数组备份。因此,只需返回数组长度就很简单。这就是复杂性。如果你在代码中思考final
O(1)
for(int i=0; i<s.length()-1;i++){
//some code here!
}
s.length()
每次迭代都被调用,那么你就不对了。现代编译器优化了这种类型的调用并更改为常量(即实例的长度)。s.length()
String