[英]What is the time complexity of String compareTo function in Java?
[英]What is complexity of length() function in String class of Java?
是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中,任何String都由final
数组备份。 因此返回数组长度很简单。 所以它是O(1)
复杂性。 如果你在你的代码中思考
for(int i=0; i<s.length()-1;i++){
//some code here!
}
每次迭代都会调用s.length()
,那么你就不对了。 现代编译器优化此类调用并将s.length()
更改为常量数(即String
实例的长度)。
复杂度为O(1)
因为String
类的长度为field
。 它不是O(n ^ 2)。
String内部维护一个字符数组 , 数组的长度是数组对象的属性 ,因此O(1)作为其简单的属性读取。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.