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

时间:2015-10-28 13:46:04

标签: java json time-complexity asymptotic-complexity org.json

我使用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)]时间运行的?如果没有,那么正确答案是什么?

2 个答案:

答案 0 :(得分:3)

当您从字符串(或JSONObject)实例化JSONTokener时,

org.json将解析整个JSON文档。 getJSONObject()getJSONArray()方法只是无类型get()方法的类型化版本(返回Object实例)。如果您查看来源,可以看到JSONObject使用HashMapJSONArray使用ArrayList进行内部表示,因此执行时间接近常量( O(1))

答案 1 :(得分:3)

getJSONArraygetJSONObject以及方法最终都会调用opt(String paramString)方法,该方法从HashMap获取值。所以他们应该在接近恒定的时间工作,即理想的O(1)。这是一个代码段:

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

您可以自己查看源代码并深入挖掘。