【发布时间】:2011-04-09 21:26:36
【问题描述】:
我想知道 Java HashMap 与 JSONObject 的性能。
似乎 JSONObject 在内部使用 HashMap 存储数据。但与 HashMap 相比,JSONObject 可能会有额外的开销。
有没有人知道Java JSONObject 与HashMap 相比的性能?
谢谢!
【问题讨论】:
-
你能指定你所指的JSONObject所在的包吗?
我想知道 Java HashMap 与 JSONObject 的性能。
似乎 JSONObject 在内部使用 HashMap 存储数据。但与 HashMap 相比,JSONObject 可能会有额外的开销。
有没有人知道Java JSONObject 与HashMap 相比的性能?
谢谢!
【问题讨论】:
正如你所说,JSONObject 由 HashMap 支持。
因此,性能几乎相同。 JSONObject.get() 添加了一个空检查,如果没有找到键,将抛出异常。 JSONObject.put() 只需调用 map.put()。
因此,几乎没有开销。如果您正在处理 JSON 对象,您应该始终使用 JSONObject 而不是 HashMap。
【讨论】:
我会说这个问题没有意义有几个原因:
【讨论】:
现有答案是正确的,两者之间的性能差异可以忽略不计。
这两种方法基本上都是存储和操作数据的效率很低的方法。更有效的方法通常是绑定到常规 Java 对象中,这些对象使用更少的内存并且访问速度更快。许多开发人员使用 org.json 的简单(原始)库,因为它是众所周知的,但它可能是最不方便和有效的替代方案。像 Jackson 和 Gson 这样的选择是很大的改进,因此值得考虑使用它们。
【讨论】:
JSONObject 在 HashMap 之上没有太多额外的开销。如果您可以使用 HashMap,那么您应该可以使用 JSONObject。前提是您要生成 JSON。
JSONObject 检查作为 JSONObject 一部分存储的值的有效性,以确保它符合 JSON 规范。例如NaN 值不构成有效 JSON 的一部分。除此之外,JSONObject 可以生成 json 字符串(常规 | 美化)。这些字符串可能会变得非常大,具体取决于 JSON 的数量。此外,JSONObject 使用 StringBuffer,所以我会做的许多事情之一就是用 StringBuilder 替换所有出现的 StringBuffer。
JSONObject(来自 org.json)是您可以使用的简单 JSON 库之一。如果您想要一些非常有效的东西,请使用杰克逊之类的东西。
【讨论】:
唯一的性能开销是转换数据!当您 JSONObject 将数据存储在对象的 HashMap 上时,它会转换您想要的数据类型。
【讨论】: