getJSONObject 和 getJSONArray 方法的复杂性是什么?



我正在使用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))

getJSONArraygetJSONObject以及方法最终都会调用opt(String paramString)方法,该方法从HashMap中获取值。因此,它们应该在接近恒定的时间内工作,即理想情况下的O(1)。下面是一个代码片段:

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

您可以自己查看源代码并深入研究。

最新更新