2015-10-28 49 views
2

我正在使用org.json庫作爲我的Java應用程序的JSON客戶端,我想知道這個庫中某些方法的複雜性。getJSONObject和getJSONArray方法的複雜性是什麼?

我從數據庫通過它的HTTP API檢索另一個JSON對象(等等)內的JSON數組內的數千個JSON對象。作爲一個例子(且僅作爲一個例子,我的情況要複雜得多),假設,我做這樣的事情:

// Ignoring attributes types 
import org.json.*; 

public static void main(String[] args) { 
    response = MyHTTPClient.post(url, query).asJSON(); 
    response = JSON.parse(response); 
    data = response.getJSONObject(1).getJSONArray("results").getJSONObject(0); 
} 

有什麼的getJSONObject(int)複雜性和org.jsongetJSONArray(String)的方法呢?它是以恆定的[O(1)]還是線性的[O(n)]時間運行的?如果沒有,那麼正確的答案是什麼?

+0

所有這些都是開源的,你可以檢查它在做什麼。我認爲JSONObject是HashMap支持的,而JSONArray是ArrayList支持的,所以get *將是O(1)。 – njzk2

+0

org.json將在您從字符串(或JSONTokener)實例化JSONObject時分析整個JSON文檔。 getJSONObject()和getJSONArray()方法只是無類型get()方法的類型化版本(它返回Object實例)。如果查看源代碼,可以看到JSONObject使用HashMap,而JSONArray使用ArrayList作爲內部表示,所以執行時間接近常量(O(1)) – erosb

回答

3

當您從字符串(或JSONTokener)實例化JSONObject時,org.json將解析整個JSON文檔。 getJSONObject()getJSONArray()方法僅僅是打字版本的無類型get()方法(它返回Object實例)。如果你看看源,你可以看到JSONObject使用HashMapJSONArray用於內部表示的ArrayList,所以執行時間是貼近常數(O(1))

3

兩個getJSONArraygetJSONObject和方法,最終請致電opt(String paramString)HashMap獲取價值的方法。所以他們應該在接近恆定的時間工作,即理想的O(1)。這裏有一個代碼片段:

public Object opt(String paramString) 
{ 
    return paramString == null ? null : map.get(paramString); 
} 

你可以看一下源代碼自己和挖掘

相關問題