我想了解Java HashMap与JSONObject的性能。
似乎JSONObject使用HashMap来存储数据。 但是与HashMap相比,JSONObject可能具有额外的开销。
有没有人了解Java JSONObject与HashMap相比的性能情况?
谢谢!
正如你所说,JSONObject
是由HashMap
支持的。
因此,性能几乎相同。 JSONObject.get()
添加了一个空值检查,如果找不到键就会抛出异常。 JSONObject.put()
只是调用了 map.put()
。
因此,几乎没有额外开销。 如果你正在处理 JSON 对象,你应该始终使用 JSONObject
而不是 HashMap
。
Map<String, Object> response = new HashMap<>();
。因为这是核心Java本地支持的,所以我更喜欢它。否则,我也尝试过来自Google Gson库的JsonObject。还有一些人可以使用POJO。就性能而言,POJO会更好,但不适合通用情况。 - Noor Khan现有答案是正确的,两者之间的性能差异微不足道。
两种方法基本上都是存储和操作数据的相当低效的方法。更有效的方法通常是将其绑定到常规Java对象中,这些对象使用的内存更少,访问速度更快。许多开发人员使用org.json的简单(基本)库,因为它很出名,但可能是可用的最不方便和最低效的选择。像Jackson和Gson这样的选择是巨大的改进,所以值得考虑使用它们。
JSONObject在HashMap的基础上没有太多额外的开销。如果您可以使用HashMap,那么使用JSONObject也应该没问题。前提是您想要生成JSON。
JSONObject检查您存储为JSONObject一部分的值的有效性,以确保其符合JSON规范。例如,NaN值不属于有效的JSON。除此之外,JSONObject可以生成json字符串(常规|美化)。这些字符串可能会变得非常大,具体取决于JSON的数量。此外,JSONObject使用StringBuffer,因此我会做的许多事情之一是将所有StringBuffer的出现替换为StringBuilder。
JSONObject(来自org.json)是您可以使用的简单JSON库之一。如果您想要非常高效的东西,请使用类似Jackson的东西。
JSONObject
将数据存储在一个对象的HashMap
中,并且它会将数据类型转换为你想要的类型。