它是O(n)還是O(1)(通過在將字符串分配給對象時在私有變量中保存長度)。什麼是Java的String類中length()函數的複雜性?
如果是O(n),是否意味着下面代碼的複雜度是O(n^2)?
for(int i=0; i<s.length()-1;i++){
//some code here!
}
它是O(n)還是O(1)(通過在將字符串分配給對象時在私有變量中保存長度)。什麼是Java的String類中length()函數的複雜性?
如果是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;
}
的複雜性是由於O(1)
類String
具有長度爲field
。這不是O(n^2)。
字符串內部維護一個字符陣列和長度數組的數組是對象因此O(1)作爲其簡單的屬性讀取的屬性。
你是什麼意思的數組對象? –
我已經提到'字符數組!而java中的數組是一個對象。 – Santosh
在Java中,任何字符串都由final
數組備份。因此,返回數組長度很簡單。所以它的複雜性是O(1)
。如果你認爲你的代碼
for(int i=0; i<s.length()-1;i++){
//some code here!
}
s.length()
被稱爲每一次迭代,那麼你是不正確的。現代編譯器優化了這種類型的呼叫並將s.length()
更改爲常數(即String
實例的長度)。
FYI java是開源的,你可以檢查它自己做什麼;) – RamonBoza
@RamonBoza其實OpenJDK是開源的。 Java是一個規範,沒有內在的源代碼。 –