3

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

4

2 回答 2

6

JSONObject当您从字符串(或JSONTokener)实例化 org.json 时,org.json 将解析整个 JSON 文档。getJSONObject()andgetJSONArray()方法只是非类型化get()方法(返回Object实例)的类型化版本。如果您查看源代码,您会看到JSONObject使用HashMapwhileJSONArray使用ArrayList内部表示,因此执行时间接近恒定 (O(1))

于 2015-10-28T13:56:28.573 回答
3

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

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

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

于 2015-10-28T14:09:07.207 回答