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