Java HashMap与JSONObject

时间:2010-09-08 17:56:13

标签: java json hashmap

我想知道Java HashMap与JSONObject的性能。

似乎JSONObject使用HashMap在内部存储数据。但是与HashMap相比,JSONObject可能会产生额外的开销。

有没有人知道Java JSONObject与HashMap相比的性能?

谢谢!

5 个答案:

答案 0 :(得分:41)

正如您所说,JSONObjectHashMap支持。

因此,性能几乎相同。 JSONObject.get()添加空检查,如果找不到密钥,则会抛出异常。 JSONObject.put()只需拨打map.put()

所以,几乎没有开销。如果您正在处理JSON对象,则始终使用JSONObject而不是HashMap

答案 1 :(得分:7)

我想说这个问题没有意义,原因如下:

  1. 将苹果与橙子进行比较:HashMap和JSONObject旨在实现两个完全不同的目的。这就像问“Person类或公司类是否更有效地存储PhoneNumber对象”。使用有意义的东西。
  2. 如果您要转换为JSON,则可能会将数据发送到远处(如用户的浏览器)。通过网络发送此数据并在用户的浏览器中对其进行评估所花费的时间(可能)远远超过填充Hashmap或JSONObject的任何性能差异。
  3. 有超过1个“JSONObject”实现在那里浮动。
  4. 最后,您还没有问过要测量的性能。你实际上打算用这些课程做什么?

答案 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个对象上时,它会强制转换所需的数据类型。