Java HashMap против JSONObject - PullRequest
       23

Java HashMap против JSONObject

31 голосов
/ 08 сентября 2010

Меня интересует производительность Java HashMap по сравнению с JSONObject.

Кажется, JSONObject хранит данные внутри, используя HashMap.Но JSONObject может иметь дополнительные издержки по сравнению с HashMap.

Кто-нибудь знает о производительности Java JSONObject по сравнению с HashMap?

Спасибо!

Ответы [ 4 ]

42 голосов
/ 08 сентября 2010

Как вы сказали, JSONObject поддерживается HashMap.

Из-за этого производительность будет практически одинаковой.JSONObject.get() добавляет нулевую проверку и выдает исключение, если ключ не найден.JSONObject.put() просто звонит map.put().

Итак, накладных расходов почти нет.Если вы имеете дело с объектами JSON, вы должны всегда использовать JSONObject сверх HashMap.

7 голосов
/ 08 сентября 2010

Я бы сказал, что вопрос не имеет смысла по нескольким причинам:

  1. Сравнение яблок с апельсинами: HashMap и JSONObject предназначены для двух совершенно разных целей.Это все равно, что спросить «является ли класс Person или класс Company более эффективным для хранения объекта PhoneNumber».Используйте то, что имеет смысл.
  2. Если вы конвертируете в / из JSON, вы, вероятно, отправляете данные в далекое место (например, в браузер пользователя).Время, затрачиваемое на отправку этих данных по сети и оценку их в браузере пользователя, (вероятно) значительно затмит любые различия в производительности заполнения Hashmap или JSONObject.
  3. Существует более 1 реализации "JSONObject".
  4. Наконец, вы не спросили о том, какую производительность вы хотели бы измерить.Что вы на самом деле планируете делать с этими классами?
4 голосов
/ 09 сентября 2010

Существующие ответы верны, различия в производительности между ними незначительны.

Оба являются в основном довольно неэффективными методами хранения и манипулирования данными. Более эффективный метод обычно заключается в связывании с обычными объектами Java, которые используют меньше памяти и имеют более быстрый доступ. Многие разработчики используют простую (примитивную) библиотеку org.json, потому что она хорошо известна, но, возможно, является наименее удобной и эффективной альтернативой. Такие варианты, как Джексон и Гсон, являются большими улучшениями, поэтому стоит подумать об их использовании.

1 голос
/ 08 сентября 2010

JSONObject не имеет слишком много дополнительных издержек поверх HashMap. Если вы в порядке с использованием HashMap, тогда вы должны быть в порядке, используя JSONObject. Это при условии, что вы хотите создать JSON.

JSONObject проверяет правильность значений, которые вы храните как часть вашего JSONObject, чтобы убедиться, что он соответствует спецификации JSON. Например, Значения NaN не являются частью действительного JSON. Помимо этого, JSONObject может генерировать строки json (обычные | предварительно настроенные). Эти строки могут быть довольно большими, в зависимости от количества JSON. Кроме того, JSONObject использует StringBuffer, поэтому я хотел бы заменить все вхождения StringBuffer на StringBuilder.

JSONObject (из org.json) - одна из простых библиотек JSON, которую вы можете использовать. Если вы хотите что-то очень эффективное, используйте что-то вроде Джексона.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...