Java字符串类中length()函数的复杂度是多少?
是O(n)还是O(1)(在字符串分配到对象期间,通过在私有变量中保存长度) 如果是O(n),是否意味着以下代码的复杂性是O(n^2)Java字符串类中length()函数的复杂度是多少?,java,time-complexity,Java,Time Complexity,是O(n)还是O(1)(在字符串分配到对象期间,通过在私有变量中保存长度) 如果是O(n),是否意味着以下代码的复杂性是O(n^2) for(inti=0;i它是O(1),因为String实例已经知道了长度 在JDK1.6中,它是可见的 public int length() { return count; } 更新 重要的是要理解为什么他们可以缓存count的值,并继续为count使用相同的值。原因在于他们在设计字符串时做出了一个伟大的决定,它的不变性。复杂性是O(1)因为字符串类
for(inti=0;i它是O(1)
,因为String
实例已经知道了长度
在JDK1.6中,它是可见的
public int length() {
return count;
}
更新
重要的是要理解为什么他们可以缓存count
的值,并继续为count
使用相同的值。原因在于他们在设计字符串时做出了一个伟大的决定,它的不变性。复杂性是O(1)
因为字符串
类的长度作为字段
。它不是O(n^2)。字符串内部维护字符的数组,数组的长度是数组对象的属性,因此O(1)作为对属性的简单读取。在Java中,任何字符串都由final
数组备份。因此,只返回数组长度很简单。因此,它是O(1)
复杂性。如果您在代码中考虑
for(int i=0; i<s.length()-1;i++){
//some code here!
}
for(int i=0;如果i java是开源的,你可以自己检查;@RamonBoza实际上OpenJDK是开源的。java是一个规范,没有内在的源代码。数组对象是什么意思?我已经提到了字符数组
!java中的数组是一个对象。
for(int i=0; i<s.length()-1;i++){
//some code here!
}