我正在使用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)]时间内运行?如果没有,正确答案是什么?
JSONTokener
)实例化JSONObject
时,org.json将解析整个json文档。getJSONObject()
和getJSONArray()
方法只是非类型化get()
方法(返回Object
实例)的类型化版本。如果查看源代码,可以看到JSONObject
使用HashMap
,而JSONArray
使用ArrayList
进行内部表示,因此执行时间接近常数(O(1))
getJSONArray
和getJSONObject
以及方法最终都会调用opt(String paramString)
方法,该方法从HashMap
中获取值。因此,它们应该在接近恒定的时间内工作,即理想情况下的O(1)。下面是一个代码片段:
public Object opt(String paramString)
{
return paramString == null ? null : map.get(paramString);
}
您可以自己查看源代码并深入研究。