Is it O(n) or O(1) (By saving length in a private variable during string allocation to the object).
if it is O(n), does it mean that the complexity of following code is
It is O(1)
as the length is already known to String
instance.
From JDK 1.6 it is visible.
public int length() {
return count;
}
Update
It is important to understand why they can cache the value of count
and keep using same value for count
. The reason lies in a great decision they took when designing String
, its Immutability.
In Java any String is backed up by an final
array. So it is simple to just return the array length. So it is O(1)
complexity. And if you think in your code
for(int i=0; i<s.length()-1;i++){
//some code here!
}
s.length()
is called for every iteration then you are not right. Modern compiler optimizes this type of call and changes s.length()
to constant number(i.e the length of the String
instance).
String internally maintains an array of characters and length of the array is a property of array object hence O(1) as its simple reading of property.
The complexity is O(1)
Since String
class have the length as a field
. It's not O(n^2).