我使用org.json库作为我的Java应用程序的JSON客户端,我想知道这个库中某些方法的复杂性。
我通过它的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);
}
来自org.json库的getJSONObject(int)
和getJSONArray(String)
方法的复杂性是什么?它是以恒定[O(1)]还是线性[O(n)]时间运行的?如果没有,那么正确答案是什么?
答案 0 :(得分:3)
JSONObject
)实例化JSONTokener
时, org.json将解析整个JSON文档。 getJSONObject()
和getJSONArray()
方法只是无类型get()
方法的类型化版本(返回Object
实例)。如果您查看来源,可以看到JSONObject
使用HashMap
而JSONArray
使用ArrayList
进行内部表示,因此执行时间接近常量( O(1))
答案 1 :(得分:3)
getJSONArray
和getJSONObject
以及方法最终都会调用opt(String paramString)
方法,该方法从HashMap
获取值。所以他们应该在接近恒定的时间工作,即理想的O(1)。这是一个代码段:
public Object opt(String paramString)
{
return paramString == null ? null : map.get(paramString);
}
您可以自己查看源代码并深入挖掘。