2013-11-28 88 views
4

它是O(n)還是O(1)(通過在將字符串分配給對象時在私有變量中保存長度)。什麼是Java的String類中length()函數的複雜性?

如果是O(n),是否意味着下面代碼的複雜度是O(n^2)?

for(int i=0; i<s.length()-1;i++){ 
    //some code here! 
} 
+1

FYI java是開源的,你可以檢查它自己做什麼;) – RamonBoza

+3

@RamonBoza其實OpenJDK是開源的。 Java是一個規範,沒有內在的源代碼。 –

回答

8

它是O(1)隨着長度已經知道String實例。

從JDK 1.6中可以看到。

public int length() { 
    return count; 
} 
0

的複雜性是由於O(1)String具有長度爲field。這不是O(n^2)。

0

字符串內部維護一個字符陣列長度數組的數組是對象因此O(1)作爲其簡單的屬性讀取的屬性

+0

你是什麼意思的數組對象? –

+0

我已經提到'字符數組!而java中的數組是一個對象。 – Santosh

1

在Java中,任何字符串都由final數組備份。因此,返回數組長度很簡單。所以它的複雜性是O(1)。如果你認爲你的代碼

for(int i=0; i<s.length()-1;i++){ 
    //some code here! 
} 

s.length()被稱爲每一次迭代,那麼你是不正確的。現代編譯器優化了這種類型的呼叫並將s.length()更改爲常數(即String實例的長度)。

相關問題